Я пишу нижче команду, щоб видалити всі файли, старші 7 днів, але це не працює:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Як я можу видалити ці файли?
Я пишу нижче команду, щоб видалити всі файли, старші 7 днів, але це не працює:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Як я можу видалити ці файли?
Відповіді:
Як @Jos вказав, ви пропустили пробіл між name
і '*.gz'
; також для прискорення -type f
параметра використання команди для запуску команди лише на f iles.
Отже, фіксованою командою було б:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: команда unix для знаходження чорнила f iles / d irectories / l та ін./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
способі.
В якості альтернативи, а також більш швидкої команди використовується +
термінатор 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
-delete
у кінці не піти прямо ? Чому возитися з +
або \;
?
Будьте обережні, видаляючи файли з пошуку. Виконайте команду з -ls, щоб перевірити, що ви видаляєте
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Потім витягніть команду з історії та додайте-exec rm {} \;
Обмежте збиток, який може зробити команда find. Якщо ви хочете видалити файли лише з одного каталогу, -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 {} \;
name
і'*.gz'
.