Какой способ командной строки найти большие файлы / каталоги для удаления и освобождения места?

Ищу серию команд, которые покажут мне самые большие файлы на диске.

206
задан 29 January 2013 в 16:21

12 ответов

Если вам просто нужно найти большие файлы, вы можете использовать find с опцией -size. Следующая команда выведет список всех файлов размером более 10 МБ ( не следует путать с 10 МБ ):

find / -size +10M -ls

Если вы хотите найти файлы определенного размера, вы можете объединить их с поиск "размер меньше чем". Следующая команда находит файлы между 10 МБ и 12 МБ:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' перечисляет некоторые программы, доступные для анализа использования диска. Одним из приложений, которое выглядит очень многообещающим является gt5.

Из описания пакета:

Прошли годы, и диски становились все больше и больше, но даже в эту невероятно огромную эпоху жесткого диска пространство, похоже, со временем исчезает. Эта небольшая и эффективная программа обеспечивает более удобный листинг, чем стандартная функция du (1). Он отображает, что произошло с момента последнего запуска, а также отображает размер каталога и общий процент. Можно перемещаться по каталогам и подниматься по ним, используя клавиши курсора в текстовом браузере (ссылки, ссылки, рысь и т. Д.)

Screenshot of gt5

Вкл. в разделе «связанные пакеты» gt5 я обнаружил ncdu. Из описания пакета:

Ncdu - программа просмотра на основе ncurses. Он обеспечивает быстрый и простой в использовании интерфейс с помощью знаменитой утилиты du. Это позволяет просматривать каталоги и показывать процент использования диска с помощью библиотеки ncurses.

Screenshot of ncdu

0
ответ дан 29 January 2013 в 16:21

Я просто использую комбинацию du и sort.

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

Тогда это случай промыть и повторить . Выберите целевые подкаталоги, которые, по вашему мнению, слишком велики, запустите для них команду и выясните, в чем причина проблемы.

Примечание. Я использую флаг du -x, чтобы ограничить доступ к одной файловой системе (у меня довольно сложное расположение кросс-монтированных объектов между SSD и RAID5).

Примечание 2: 2>/dev/null перенаправляет все сообщения об ошибках в забвение. Если они вас не беспокоят, это не обязательно.

0
ответ дан 29 January 2013 в 16:21

Мое любимое решение использует смесь из нескольких хороших ответов.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du аргументы:

  • -a для «всех» файлов и каталогов. Оставьте это только для каталогов
  • -BM для вывода размеров в мегабайтах (M) размеров блоков (B)
  • 2>/dev/null - исключите сообщения об ошибках «Отказано в доступе» (спасибо @Oli )

sort аргументы:

  • -n для «числовых»
  • -r для «обратных» (от самых больших к наименьшим) [ 1117]

head аргументы:

  • -n 50 для лучших 50 результатов.
  • Не указывайте more, если используете меньшее число

Примечание. Префикс sudo включает каталоги, к которым у вашей учетной записи нет прав доступа.

Пример, показывающий 10 самых больших файлов и каталогов в / var (включая общий итог).

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache
0
ответ дан 29 January 2013 в 16:21

Ответ qbi правильный, но он будет очень медленным, когда файлов много, так как он начнет новый процесс ls для каждого элемента.

гораздо более быстрой версией, использующей поиск без порождения дочерних процессов, будет использование printf для печати размера в байтах (% s) и пути (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries

0
ответ дан 29 January 2013 в 16:21

Для отображения самых больших лучших 20 каталогов (рекурсивно) в текущей папке используйте следующую остроту:

du -ah . | sort -rh | head -20

или (больше ориентированного Unix):

du -a . | sort -rn | head -20

Для лучших 20 самых больших файлов в текущем каталоге (рекурсивно):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

или с человекочитаемыми размерами:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Обратите внимание на то, что -h доступно для GNU sort только, так чтобы заставить его работать над OSX/BSD правильно, необходимо установить его от coreutils. Затем добавьте его папку в Ваш PATH.

Таким образом, эти псевдонимы полезны, чтобы иметь в Ваших емкостно-резистивных файлах (каждый раз при необходимости в нем):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
13
ответ дан 29 January 2013 в 16:21

Это выглядит как идеальное приложение для find:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Эта команда найдет все файлы в каталоге $DIRECTORY и выполнит для них ls -s. Последняя команда печатает выделенный размер файла плюс имя файла. Результат отсортирован по номерам, и показаны последние пять записей. В результате вы увидите 5 самых больших файлов в $DIRETORY или любом подкаталоге. Если вы введете tail -n 1, вы увидите только самый большой файл.

Кроме того, вы можете много играть с find. Например, вы можете искать файлы, которые моложе n дней (-ctime -n) или принадлежат специальным пользователям (-user johndoe).

0
ответ дан 29 January 2013 в 16:21

Попробуйте Баобаб, он дает Вам графический обзор файлов и папок, Вы видите, где реальные пожиратели ресурсов пространства - и удаляют их одним щелчком https://help.ubuntu.com/community/Baobab

1
ответ дан 29 January 2013 в 16:21

Вы также можете отсортировать файлы по размеру:

find . -type f -exec du -h {} \; | sort -k1 -h

Он находит только файлы и выполняет du -h для каждого файла, который показывает размер файла. Наконец, мы сортируем выходные данные find / du по первому столбцу (в удобочитаемом формате).

Последний напечатанный файл является самым большим.

0
ответ дан 29 January 2013 в 16:21

Чтобы найти все файлы GB, например, я бы использовал du и grep, хотя другие методы, упомянутые здесь, также кажутся великолепными.

du -h -a /dir | grep "[0-9]G\b"  

Вы также можете полюбоваться с опцией --except, которую имеет du.

0
ответ дан 29 January 2013 в 16:21

Когда мне нужно освободить больше места на серверах, я использую эту команду. Он находит все файлы размером более 50 МБ и «du -h» составляет лучший список файлов, а «sort -n» после нумерации списка составляется по размеру файла.

find / -size +50M -type f -exec du -h {} \; | sort -n
0
ответ дан 29 January 2013 в 16:21

Отличный, легкий в использовании инструмент, на который ссылаются в ответе на подобный вопрос , NCurses Disk Usage инструмент:

sudo ncdu /
0
ответ дан 22 November 2019 в 22:44

Можно использовать команду для наблюдения самых больших файлов при пропуске каталогов:

sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

Для нахождения всех файлов, которые больше, чем 100 МиБ (это не 100 МБ см. здесь , если Вы смущены):

find / -size +100M -ls

команда ниже отобразит самые большие 5 файлов в папке $DIRECTORY:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

ИСПОЛЬЗУЯ du: команда, ниже который использование du, отобразите каталоги с 20 самыми большими размерами в домашней рабочей папке:

sudo du -a /home | sort -n -r | head -n 20

Теперь, чтобы теперь отобразить самые большие каталоги/файлы включая подпапки, работайте:

du -Sh | sort -rh | head -n 10

Используя ls:

Для списка 5 главных самых больших файлов в / каталоге bin дайте команду ниже:

ls -lSh /bin | head -5

можно также использовать Использование диска Анализатор или Baobao как показано здесь , например.

0
ответ дан 22 November 2019 в 22:44

Другие вопросы по тегам:

Похожие вопросы: