Как найти файлы, размер которых больше/меньше x байт?

Как найти файлы, размер которых больше/меньше x байт?

Как в терминале найти файлы, размер которых больше или меньше x байт?

Я полагаю, что я могу сделать что-то вроде

find . -exec ls -l {} \;

а затем передать результат вawkдля фильтрации по размеру файла. Но разве не должно быть более простого способа, чем этот?

решение1

Использовать:

find . -type f -size +4096c

для поиска файлов размером более 4096 байт.

И :

find . -type f -size -4096c

для поиска файлов размером менее 4096 байт.

Обратите внимание на разницу + и - после изменения размера.

Коммутатор -sizeобъяснил:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

решение2

Я думаю, findможет быть полезным само по себе, без перенаправления в AWK. Например,

find ~ -type f -size +2k  -exec ls -sh {} \;

Тильда указывает, с чего следует начать поиск, а в результатах должны отображаться только файлы размером более 2 килобайт.

Чтобы сделать его более интересным, вы можете использовать -execопцию для выполнения другой команды, которая выводит список этих каталогов с их размерами.

Для получения более подробной информации прочтитестраница руководства дляfind.

решение3

AWK действительно довольно прост для такого рода вещей. Вот некоторые вещи, которые вы можете сделать с ним в отношении проверки размера файла, как вы и просили:

Список файлов размером более 200 байт:

ls -l | awk '{if ($5 > 200) print $8}'

Вывести список файлов размером менее 200 байт и записать список в файл:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

Список файлов размером 0 байт, запись списка в файл и удаление пустых файлов:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm

решение4

С использованиемfd, который гораздо приятнее в использовании, чемfind

fd -S +1g

будет искать в текущем каталоге любые файлы размером более 1 ГБ

fd -S -1g

будет искать файлыменьшечем 1 ГБ

Связанный контент