Piszę poniżej polecenie, aby usunąć wszystkie pliki starsze niż 7 dni, ale to nie działa:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Jak mogę usunąć te pliki?
Piszę poniżej polecenie, aby usunąć wszystkie pliki starsze niż 7 dni, ale to nie działa:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Jak mogę usunąć te pliki?
Odpowiedzi:
Jak zauważył @Jos, brakuje Ci spacji między name
i '*.gz'
; również do przyspieszenia wykorzystania poleceń -type f
opcję uruchamiając polecenie na f iles tylko.
Stałym poleceniem byłoby:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: Komenda UNIX znalezienia f ÎLES / d irectories / l farb itp/path/to/
: katalog, w którym chcesz rozpocząć wyszukiwanie.-type f
: znajdź tylko pliki.-name '*.gz'
: lista plików, które kończą się na .gz
.-mtime +7
: rozważ tylko te, których czas modyfikacji jest starszy niż 7 dni.-execdir ... \;
: dla każdego znalezionego wyniku wykonaj następującą komendę w ...
.rm -- '{}'
: usuń plik; ta {}
część zastępuje wynik wyszukiwania z poprzedniej części. --
oznacza, że parametry końca polecenia unikają błędów w pytaniach dla plików rozpoczynających się od łącznika .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Od człowieka znajdź :
-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.
Co jest nieco bardziej wydajne, ponieważ wynosi:
rm file1 file2 file3 ...
w przeciwieństwie do:
rm file1; rm file2; rm file3; ...
jak w -exec
metodzie.
Alternatywnym, a także szybszym poleceniem jest użycie +
terminatora exec zamiast\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
To polecenie będzie uruchamiane rm
tylko raz na końcu zamiast za każdym razem, gdy plik zostanie znaleziony, a to polecenie jest prawie tak szybkie, jak użycie -delete
opcji jak we współczesnym find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
na koniec? Po co mieszać z +
lub \;
?
Ostrożnie usuwaj pliki przy pomocy find. Uruchom komendę z opcją -ls, aby sprawdzić, co usuwasz
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Następnie pobierz polecenie z historii i dołącz-exec rm {} \;
Ogranicz obrażenia, które może zadać polecenie znajdowania. Jeśli chcesz usunąć pliki z tylko jednego katalogu, -maxdepth 1
uniemożliwia find przechodzenie przez podkatalogi lub przeszukiwanie całego systemu, jeśli literówka /media/bkfolder /
.
Inne limity, które dodaję, to bardziej szczegółowe argumenty nazwy, takie jak -name 'wncw*.gz'
dodawanie nowszego niż czas -mtime -31
i cytowanie przeszukiwanych katalogów. Są to szczególnie ważne, jeśli automatyzujesz porządki.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
a'*.gz'
.