Сегодня мы займёмся поиском "толстяков" на файловой системе. И сделаем это аж двумя разными способами. В принципе, мы можем обойтись и одним... Но двумя абсолютно разными всё же интереснее!
Узнать самые большие директории / папки с помощью du
Во многих Unix системах (а среди них, например, Linux, MacOS, FreeBSD) присутствует утилита du, которая так и расшифровывается - dusk usage - использование диска. Её и логичнее всего запустить для поиска больших директорий или, если вам привычнее, папок.
du -sh /path/
Где ключи "-sh" означают: только директории в указанной, а также - в человеко-читаемом виде. То есть просим рассказать о размерах директорий только на 1 уровень вглубь. Это удобно, когда мы хотим примерно представить, где у нас обирают самые большие файлы. Можно и убрать ключ "s" и увидеть информацию по всем папкам, но листинг будет довольно большим.
Дальше, если вы приметили, в какой директории хотите конкретно покопаться:
du -ah /path/to/folder
С ключом "a" du
выведет информацию и о файлах, и о папках. Всё это можно чуть-чуть
улучшить. Например, вывести топ-10 самых больших папок (дабы не рыться в списке):
du -hs */ | sort -rh | head -10
du
нам отдаст список всех директорий с их размером, sort
отсортирует всё в обратном порядке (от большого к малому) с учётом, что 1Gb больше 10Mb, ну а head
отдаст 10 верхних записей - то есть как раз наши топ-10 файлов по размеру.
Аналогично можно поменять ключ "s" на "a" - будет список вперемешку: файлы и папки.
Поиск самых больших файлов с помощью утилиты ls
Второй способ, возможно, покажется кому-то менее интуитивным... но у команды ls
есть ключ -l
, который выводит подробную информацию по всем файлам, переданным ей в виде аргументов,
либо же просто текущей директории.
Так что нам осталось только подготовить список файлов, среди которых мы будем искать самые большие. Для этого используем команду find, которая и умеет искать рекурсивно файлы на нашей файловой системе. Особо требований у нас нет - просто файлы (без директорий/блоковых устройств/сокетов и прочих файлов в общем смысле Unix).
find . -type f -print
И вот у нас есть уже список всех файлов, которые можно найти из текущей директории.
Теперь нужно их передать на вход ls
с помощью команды xargs,
а результат отсортировать по 5-му столбцу (где и указан размер файла). Ну и head
для того, чтобы листинг не был громоздким:
find . -type f -print \
| xargs ls -l \
| sort -r -n -k 5,5 \
| head -10
Вот так, комбинируя различные команды Unix, мы получили довольно занятные "программы" для поиска самых больших файлов на нашем жёстком диске.