Видалення файлів старше 500 днів


10

У мене є каталог з файлами 2010 року. Я хочу видалити всі файли старші 500 днів, і я спробував це:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Але я розумію:

-bash: /usr/bin/find: Argument list too long

Як я знаю, це означає, що файлів занадто багато, і findїх не вдається обробити. Але навіть якщо я поставив +2000це 3+ роки, я все одно отримую це.

Чого мені тут не вистачає?


1
unix.stackexchange.com/a/239268/116858 (див. також коментар)
Kusalananda

Відповіді:


18

Вам не вистачає, що findне потрібен список файлів як вхідних даних. Проблема полягає в тому, що глобус /var/log/arc/*розширюється на занадто багато файлів. Однак findза замовчуванням буде повторно введено в підкаталоги, тож зовсім не потрібно використовувати глобус:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteє нестандартним присудком. Якщо ваша findреалізація не підтримує його, ви можете використовувати:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

замість цього.


Дякую, але тепер отримав це: find: invalid predicate -delete'`
Гарг

1
@Garg спочатку, вибачте, щойно я скопіював вашу команду, і не помітив, що ваш синтаксис неправильний. -deleteНе приймає {}. Дивіться оновлення. Однак, як видається, повідомлення про помилку findговорить про те, що ваша версія не підтримує -delete. Якщо ви не використовуєте GNU find(який у більшості випадків ви не будете, якщо ви не використовуєте Linux), вам потрібно скористатися ним -exec -rm {} \;.
тердон

Дякую. -exec rm {} \;виконайте трюк.
Гарг

1
@hobbs Я не розумію , чому немає, -execце визначається POSIX .
terdon

@terdon моя помилка.
варення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.