Удаление файлов, более старых, чем 7 дней

Я пишу ниже команды для удаления всех файлов, которые являются более старыми, чем 7 дней, но она не работает:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

Как я могу удалить эти файлы?

80
задан 8 September 2017 в 20:40

2 ответа

Будьте осторожными файлами удаления с находкой. Выполните команду с-ls для проверки то, что Вы удаляете

find /media/bkfolder/ -mtime +7 -name '*.gz' -ls. Затем потяните команду из истории и добавьте -exec rm {} \;

Предел ущерб, который может нанести команда находки. Если Вы хотите удалить файлы всего из одного каталога, -maxdepth 1 предотвращает, находят от обхода до подкаталогов или от поиска полной системы если Вы опечатка /media/bkfolder /.

Другие пределы, которые я добавляю, являются аргументами более собственного имени как -name 'wncw*.gz', добавляя более новое - чем время -mtime -31, и заключая в кавычки искавшие каталоги. Они особенно важны при автоматизации очисток.

find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;

3
ответ дан 22 November 2019 в 23:15

Поскольку @Jos указал на пропавших без вести пространства между name и '*.gz'; также для ускорения использования команды -type f опция к выполнению команды на файлах только.

Таким образом, фиксированная команда была бы:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

Объяснение:

  • find: команда Unix для нахождения файлов/каталогов/ссылок и и т.д.
  • /path/to/: каталог для запуска поиска в.
  • -type f: только найдите файлы.
  • -name '*.gz': файлы списка, который заканчивается .gz.
  • -mtime +7: только считайте тех со временем изменения более старыми, чем 7 дней.
  • -execdir ... \;: для каждого такого найденного результата выполните в следующей команде ....
  • rm -- '{}': удалите файл; {} часть - то, где в результат находки заменяют от предыдущей части. -- конец средств параметров команды старается не запрашивать ошибку те файлы, запускающиеся с дефиса.

С другой стороны, использование:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

От человека найдите:

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

Который немного более эффективен, потому что это составляет:

rm file1 file2 file3 ...

в противоположность:

rm file1; rm file2; rm file3; ...

как в -exec метод.


Альтернатива и также более быстрая команда используют должностное лицо + разделитель вместо \;:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

Эта команда будет работать rm только однажды в конце вместо каждого раза файл найден, и эта команда почти с такой скоростью, как использует -delete опция как после в современном find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete
137
ответ дан 22 November 2019 в 23:15

Другие вопросы по тегам:

Похожие вопросы: