209

В терминале, как я могу найти файлы, которые больше или меньше х байтов?

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

find . -exec ls -l {} \;

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

4 ответа4

336

Использование:

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.
6

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

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

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

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

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

4

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
3

Больше чем 2000 байтов:

du -a . | awk '$1*512 > 2000 {print $2}'

Менее 2000 байтов:

du -a . | awk '$1*512 < 2000 {print $2} '

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .