Próbuję usunąć niektóre pliki archiwów z folderu na serwerze plików CentOS za pomocą usługi cronjob. Wymagania:
- Usuń pliki z ostatniego miesiąca
- Plik .tgz pierwszego dnia miesiąca należy pozostawić nietknięty.
Wiem, że mogę usunąć pliki starsze niż x dni za pomocą:
find /path -mtime +30 -exec rm {} \;
Nie pozostawi to jednak samego archiwum utworzonego pierwszego dnia miesiąca. Wydaje się, że Internet nie zapewnia (jeszcze) odpowiedzi.
linux
bash-scripting
Robert
źródło
źródło
log-2013-02-27.tgz
I takie? W takim przypadku możesz uruchomićtouch *-01.tgz
przedfind
poleceniem. Wszystkie pliki z pierwszego każdego miesiąca należy zaktualizować do bieżącego znacznika czasu, a tym samym nie dopasować.+29
zamiast+30
zrobić?find /path -mtime +30 ! -name log-2013-02-01.tgz -exec rm {} \;
?Odpowiedzi:
Najpierw notatka
W systemach plików unix nie masz informacji o czasie utworzenia pliku. To, co często nazywane jest ctime, to czas zmiany statusu pliku. Można to zmienić przez zmianę nazwy pliku lub zmiany uprawnień.
Zobacz ten link, aby uzyskać więcej informacji.
Ostrzegamy, że poniższe rozwiązanie może zawieść.
Rozwiązanie za pomocą
awk
find
nie ma operatora do wybierania specjalnej daty. Zatem sztuczka polega na utworzeniu wyniku z dniem miesiąca i nazwą pliku oraz za pomocą separatora, który nie jest częścią nazw plików. Zakładam, że#
to taki możliwy znak separatora.W drugim kroku możesz odfiltrować niechciane pliki.
Rozwiązanie za pomocą
grep
icut
Wykonanie tej samej sztuczki, co powyżej.
źródło