Usuwanie plików według wieku

16

Czy istnieje polecenie usunięcia wszystkich plików w katalogu, który nie został zmodyfikowany w ciągu N dni? Muszę wyczyścić stare dzienniki.

użytkownik1024
źródło

Odpowiedzi:

24

Spowoduje to usunięcie wszystkich plików starszych niż 5 dni, możesz też umieścić -name '*log'tam plik, aby być bardziej precyzyjnym, i możesz też podać maxdepthpolecenie find.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
źródło
5
Chociaż mądrzy sysadmini robią suchą próbę, -lszamiast -deletemieć pewność, że nie usunie niczego, co chcieliby zachować. Tak, mówiąc z doświadczenia tutaj.
Shadur
2
Mówiąc z doświadczenia, sprawdzają również swoją ścieżkę. czy nie, ponieważ raz zrobiłem / some/dir/wersję. :(
Hennes,
3

Z kwalifikatoramizsh i (.m+n) glob : .wybiera tylko zwykłe pliki, m+nwybiera pliki zmodyfikowane ponad n dni temu;
np. wyświetl listę plików w bieżącym katalogu, które zostały zmodyfikowane ponad 9 dni temu:

print -rl -- *(.m+9)

dodaj, Daby dołączyć pliki kropek:

print -rl -- *(D.m+9)

lub jeśli chcesz powtórzyć (i np. wymienić tylko pliki kończące się na .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

wymienić print -rlze rmjeśli jesteś zadowolony z wyniku; chociaż możesz użyć, zargsjeśli masz wiele plików (aby uniknąć zbyt długiej listy argumentów ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
źródło