Chcę usunąć z katalogu pliki dziennika starsze niż 5 dni. Jednak usunięcie nie powinno opierać się na sygnaturze czasowej pliku. Powinien być oparty na nazwie pliku. Na przykład transmisji data jest 07/05/2012 a katalog zawiera 10 plików z nazwami takimi jak ABC_20120430.log
, ABC_20120429.log
, ABC_20120502.log
, ABC_20120320.log
itd. Chcę, aby móc usunąć pliki poprzez ekstrakcję datę z nazwą pliku.
10
Myślę, że @oHessling prawie go ma: nie analizuj ls , a możesz zrobić więcej w bash:
źródło
four_days=$(echo "puts [clock format [clock scan {4 days ago}] -format %Y%m%d]" | tclsh)
Jeden sposób przy użyciu
perl
:Treść
script.pl
:Aby to przetestować, tworzę niektóre pliki:
Sprawdź je za pomocą
ls -1
:Uruchom skrypt w następujący sposób:
Z następującą mocą wyjściową:
źródło
Zamiast tego możesz użyć faktu, że nazwy plików będą sortowane w kolejności chronologicznej. Na przykład, aby zachować ostatnie 5 plików:
źródło
rm
chyba że wiesz, że zabijasz kocięta za każdym razem, gdy to robisz. To po prostu zły pomysł, jeśli nie wiesz, po co przeprowadzać badania i dowiadujesz się, że zawsze istnieją lepsze sposoby rozwiązania każdego problemu, dla którego może to być rozwiązanie.