it-swarm-ru.tech

Как я могу найти файлы?

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

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

find . -exec ls -l {} \;

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

222
ceiling cat

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

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.
353
John T

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

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

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

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

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

6
Siobhan

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
MaQleod

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

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

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

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