Как удалить все файлы меньше определенного размера во всех подпапках?


88

У меня есть папка со многими подпапками, содержащими небольшие tif-файлы (менее 160 КБ), которые были объединены в большие pdf-файлы вместе с некоторыми большими многостраничными tif-файлами.

Я хочу удалить все небольшие файлы TIF, не удаляя файлы большего размера (TIF или PDF) и сохраняя структуру каталогов. Как мне это сделать в Linux с помощью командной строки?

Ответы:


155
find . -name "*.tif" -type 'f' -size -160k -delete

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

Обратите внимание на -ранее 160k. Просто 160kозначает ровно 160 килобайт. -160kозначает меньше, чем 160 килобайт. +160kозначает более 160 килобайт.

В -type 'f'вынуждает команду действовать только на файлы и пропускать каталоги. Это позволит избежать ошибок, если путь содержит папки с именами, которые соответствуют шаблону *.tif.

Если вы хотите , чтобы фильтровать размер в байтах (как в 160 байт вместо 160 килобайта) , то вы должны написать это: 160c. Если вы просто напишите, 160это будет интерпретировано как 160 * 512 байт. Это странное требование POSIX. Подробнее читайте здесь: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


Справочная страница Ubuntu, кажется, упоминает об этом. Прямо под разделом «ИСПЫТАНИЯ»: числовые аргументы могут быть указаны как + n для больше чем n, -n для меньше чем n, n для ровно n.
JDG

1
Благодарю. мне не пришло в голову, что информация может быть где-то еще на странице руководства.
Lesmana

Хорошо, что эта команда также работает рекурсивно. Мой вариант использования будет удалить файлы .txt размером менее 12 КБ.
вс

нет необходимости в судо?
Жан-Франсуа Ганьон

11
Для размеров в байтах укажите 50c, а не 50b или 50!
Evengard
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.