Я пишу ниже команды для удаления всех файлов, которые являются более старыми, чем 7 дней, но она не работает:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Как я могу удалить эти файлы?
Будьте осторожными файлами удаления с находкой. Выполните команду с-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 {} \;
Поскольку @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