Usuwanie plików starszych niż 7 dni


79

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?


5
Powinna być spacja między namea '*.gz'.
Jos

Odpowiedzi:


136

Jak zauważył @Jos, brakuje Ci spacji między namei '*.gz'; również do przyspieszenia wykorzystania poleceń -type fopcję uruchamiając polecenie na f iles tylko.

Stałym poleceniem byłoby:

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

Wyjaśnienie:

  • 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 .

Alternatywnie użyj:

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 -execmetodzie.


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 rmtylko raz na końcu zamiast za każdym razem, gdy plik zostanie znaleziony, a to polecenie jest prawie tak szybkie, jak użycie -deleteopcji jak we współczesnym find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

3
Dlaczego nie miałbym iść prosto -deletena koniec? Po co mieszać z +lub \;?
rain01


2

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 1uniemoż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 -31i 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 {} \;

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.