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

160

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

    
задан Ryan Detzel 20.04.2011 в 16:01
источник

10 ответов

227

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

find / -size +10M -ls

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

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

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

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

Years have passed and disks have become larger and larger, but even on this incredibly huge harddisk era, the space seems to disappear over time. This small and effective programs provides more convenient listing than the default du(1). It displays what has happened since last run and displays dir size and the total percentage. It is possible to navigate and ascend to directories by using cursor-keys with text based browser (links, elinks, lynx etc.)

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

Ncdu is a ncurses-based du viewer. It provides a fast and easy-to-use interface through famous du utility. It allows to browse through the directories and show percentages of disk usage with ncurses library.

    
ответ дан Lekensteyn 20.04.2011 в 16:16
источник
29

Я использую только комбинацию 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 перенаправляет любые сообщения об ошибках в забвение. Если они вас не беспокоят, это не обязательно.

    
ответ дан Oli 20.04.2011 в 16:30
17

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

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

% аргументов co_de%:

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

% аргументов co_de%:

  • 2>/dev/null для "числовых"
  • sort для «обратного» (от самого большого к наименьшему)

% аргументов co_de%:

  • -n для только 50 результатов.
  • Оставьте -r при использовании меньшего числа

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

Пример отображения 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
    
ответ дан Dan King 04.07.2015 в 01:24
8

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

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

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

    
ответ дан kon 16.11.2011 в 13:55
7

Чтобы отобразить самые большие 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

Please note that -h is available for GNU sort only, so to make it work on OSX/BSD properly, you've to install it from coreutils. Then add its folder into your PATH.

Итак, эти псевдонимы полезны для файлов rc (каждый раз, когда вам это нужно):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
    
ответ дан kenorb 05.03.2015 в 15:17
6

Это кажется идеальным приложением для 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 ).

    
ответ дан qbi 20.04.2011 в 16:26
2

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

find / -size +50M -type f -exec du -h {} \; | sort -n
    
ответ дан zorbon.cz 11.10.2014 в 22:40
1

Попробуйте Baobab, он дает вам графический обзор файлов и папок, вы можете видеть, где находятся настоящие космические свиньи, и удалять их одним щелчком мыши Ссылка

    
ответ дан Oliver Hoffmann 29.01.2013 в 12:47
1

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

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

Вы также можете получить представление о параметре --except, который имеет.     

ответ дан dermen 11.06.2013 в 21:04
0

blanktest - Пустая папка

test - папка для удаления

rsync -a --delete blanktest/ test/
    
ответ дан HBian 22.05.2014 в 13:06
0

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

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

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

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

    
ответ дан Peregring-lk 08.09.2016 в 14:28