Вопрос Как найти файлы, которые больше / меньше, чем x байтов?


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

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

find . -exec ls -l {} \;

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


183
2017-10-28 23:09


происхождения




ответы:


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

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.

285
2017-10-28 23:37



@Jay: Из человек находит в начале раздела «Тесты»: «Числовые аргументы могут быть указаны как + n для большего, чем n, -n меньше n, n для ровно n». - Dennis Williamson
Страница руководства упоминает его в верхней части и описывает, что + и - может применяться ко всем переключателям, которые принимают числовые («n») аргументы, включая значения «+» и «-». (Ищите ИСПЫТАНИЯ на странице руководства, чтобы найти начало раздела, где это описано) - Slartibartfast
Похоже, что версия GNU на странице руководства имеет раздел «Тесты», но версия BSD этого не делает. linuxmanpages.com/man1/find.1.php - Jay
В справочной странице Solaris есть раздел «Выражение», который также объясняет это. docs.sun.com/app/docs/doc/816-0210/6m6nb7m9j?l=en&a=view - Jay
Я только что узнал, что страницы руководства BSD описывают +/- вещь. Его путь в конце раздела «Первичные». - Все первичные элементы, которые принимают числовой аргумент, позволяют номеру предшествует знак плюса («+») или знак «минус» («-»). Знак предшествующего плюса означает «больше n», предыдущий знак минус означает «меньше n», и ни один из них не означает «точно n», - Jay


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

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

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

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

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


6
2017-10-25 22:03





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
2017-10-29 00:01



разбор ls не хорошо - phuclv
В чем разница между трубопроводом и tee и просто перенаправление на файл, например ls -l > filelog (или ls -l >> filelog)? - OmarOthman


Более 2000 байт:

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

Менее 2000 байт:

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

3
2017-10-28 23:27