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


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


Сторінка man 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.