Команда find в Linux и как она помогает в отображении читаемых размеров файлов
Find - это довольно эффективный метод в операционной системе Linux, который необходим для поиска каталогов/файлов по определенным атрибутам. Когда речь идет о размере файлов, результаты по умолчанию могут быть не совсем понятны пользователям.
Чтобы изменить эту неприятную ситуацию и получить более понятный результат, мы решили поделиться своим опытом в этой области. Комбинация команды find с другими командами может быть полезным в этой ситуации и, таким образом, определенно упростит процесс поиска.
В этой статье мы поделимся некоторыми из наиболее полезных комбинаций команд, которые могут дать человекопонятные результаты. Если эта тема кажется вам интересной, то давайте рассмотрим несколько хороших примеров.
Опция -printf команды find
С помощью команды find можно искать файлы по их размеру, разрешению, владельцу, типу, имени и многим другим параметрам. Когда мы применяем другую команду -printf, она выводит информацию о конкретных искомых файлах. Чтобы получить информацию о размере файла, нужно применить такие спецификаторы, как %s.
Вот как должна выглядеть эта команда:
$ find /pathtodirectory -type f -printf "%s %p\n"
Используя %s, вы получаете вывод в байтах. В данном случае будут выведены числа в байтах и названия файлов после них. Чтобы получить более читабельную информацию, например, в килобайтах, а не просматривать вариант по умолчанию, используйте следующую команду:
$ find /pathtodirectory -type f -printf "%k KB %p\n".
Используя %k, вы указываете критерий килобайтов в поиске. Перед использованием любого из рассмотренных примеров лучше проверить, подходит ли он для вашей операционной системы, поскольку в разных Unix-системах эта команда может работать по-разному.
Использование команды du с find
Еще один отличный вариант - использование команды du вместе с find. Команда du уже предустановлена на всех системах Linux, поэтому вам не нужно тратить дополнительное время на процесс установки. Вот пример использования этой команды:
$ find /pathtodirectory -type f -exec du -h {} +
Теперь давайте попробуем понять, какие команды здесь были использованы. Часть -type f ищет все файлы в определенном каталоге. -exec - это выполнение следующей команды, символ плюс позволяет искать несколько имен файлов, а скобки используются для отображения всех необходимых данных в виде списка.
Для показа всех файлов в мегабайтах также можно использовать команду du. Однако в этом случае файлы, размер которых меньше 1 МБ, будут показаны как имеющие один мегабайт. Командная строка будет выглядеть следующим образом:
$ find /pathtodirectory -type f -exec du -m {} +
Вы можете использовать эту команду и получить достоверный результат только в том случае, если размер файлов составляет 1 МБ и выше.
Если вам нужна подобная информация только о каталогах, вы также можете воспользоваться этой командой. Вот как это выглядит:
$ find /pathtodirectory -maxdepth 1 -type d -exec du --max-depth=1 -h {} +
Используя эту строку, вы ищете все каталоги в пути, который вы указали сразу после find. Характеристики Maxdepth ищут только каталоги в выбранной папке. Последнее число в выводе показывает общий размер всех каталогов.
Исследование размеров файлов с помощью ls
Ls - это типичная команда Linux, необходимая для листинга каталогов/файлов. Чтобы показать размеры файлов в человеческом измерении, можно воспользоваться следующей строкой:
$ find /pathtodirectory -type f -exec ls -lh {} +
В этой последовательности ls -lh отвечает за отображение всех элементов каждого файла, включая также характеристики размера. Чтобы сделать эту строку более конкретной и показывать результаты размера в килобайтах (можно также использовать для мегабайтов и байтов), используйте следующий пример:
$ find /pathtodirectory -type f -exec ls -l --block-size=KB {} +
Если вам нужна более структурированная информация о размерах файлов, вы можете выбрать отображение их в порядке убывания или возрастания. Это можно сделать с помощью следующей строки:
$ find /pathtodirectory -type f -print0 | xargs -0 ls -lS --block-size=KB
Результаты будут показаны в порядке убывания.
Расширенная фильтрация с помощью grep
Для расширенной фильтрации наиболее используемой командой является grep, с помощью которой вы можете выбрать нужный шаблон, и все показанные последовательности будут включать этот шаблон. В качестве примера наберём команду, которая покажет только файлы размером в MB:
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {} + | grep -E '\b[0-9]+M\b'
В этой строке \b используется как специфическая граница, что означает, что M будет искаться как часть размера, но не как-либо иначе. Для сужения критериев поиска можно использовать ту же команду и добавить нужное ключевое слово. Строка должна выглядеть следующим образом:
$ find /pathtodirectory -type f -exec du -h {} + | grep 'keyword'
Сортировка и уточнение результатов
Если вы хотите отсортировать файлы по их размеру, есть несколько вариантов, которые можно использовать, и здесь мы предложим вам несколько примеров того, как можно использовать команду sort для этой цели.
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {} + | sort -h -k1
В этой строке, как и во многих других, мы используем команду du, чтобы получить человекочитаемые размеры. С помощью характеристики -k1 мы уточняем, что фильтрация должна производиться в зависимости от начального поля каждой строки. По умолчанию сортировка производится по возрастанию, но с добавлением параметра -r можно получить и убывающие результаты. Вот как это должно выглядеть:
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {} + | sort -rh -k1
Мы можем пойти еще дальше в нашем поиске и указать точный размер файла, который нам нужен, или ниже/выше определенного диапазона. Например, давайте найдем в Интернете файлы размером менее 30 МБ:
$ find /pathtodirectory -maxdepth 1 -type f -size -30M -exec du -h {} +
Для поиска результатов, превышающих 30 мегабайт, вы можете просто заменить минус на плюс. Если вам нужны файлы определенного размера, а не больше или меньше, достаточно убрать +/- перед числом мегабайт.
Еще одна вещь, которую можно сделать с помощью команды сортировки, - это отображение результатов в порядке убывания или возрастания, это можно сделать, как в следующей строке:
find /pathtodirectory -maxdepth 1 -type f -size +30k -exec du -h {} + | sort -h -k1
Подведем итоги
В этой статье мы постарались поделиться своими практическими знаниями в этой области и привести реальные примеры того, как можно использовать команду find для отображения результатов поиска в более понятной и читабельной форме. Что касается вывода по умолчанию, то пользователь получает результаты в байтах, что не всегда удобно и препядствует правильной интерпретации.
Чтобы получить более настраиваемые результаты поиска, есть несколько хороших вариантов, таких как ls, grep, du и другие. С использованием удобных результатов стало намного проще получить более глубокие знания. У вас есть прекрасная возможность проверить все, что вы только что узнали в теории, - в применении этих команд нет никаких сложностей даже для неопытных пользователей.