Piszę skrypt bash, który musi usunąć stare pliki.
Obecnie jest wdrażany przy użyciu:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Spowoduje to usunięcie plików starszych niż 1 dzień.
Co jednak, jeśli potrzebuję dokładniejszej rozdzielczości tego dnia, powiedzmy, że ma 6 godzin? Czy istnieje przyjemny, czysty sposób na zrobienie tego, na przykład użycie funkcji find i -mtime?
$LOCATION
a$REQUIRED_FILES
może obie mają wiele wartości, takich jak:dir1 dir2
a*.txt *.tmp
?Możesz skorzystać z tej sztuczki: utwórz plik godzinę temu i użyj
-newer file
argumentu.(Lub użyj,
touch -t
aby utworzyć taki plik).źródło
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Tworzy plik,test
który ma zawsze 1 godzinę.Oto podejście, które zadziałało dla mnie (i nie widzę, aby było stosowane powyżej)
usuwając wszystkie pliki starsze niż 59 minut, pozostawiając nienaruszone foldery.
źródło
'*.*'
użyć pojedynczego cudzysłowu, ponieważ powłoka rozwinie go do rzeczywistych nazw plików zamiast trzymać go jako symbol wieloznacznyfind
do rozwiązania. To przerywafind
rekurencyjną operację na podkatalogach.-name '*.*'
nie będzie plików Usuń, które nie mają rozszerzenia, takie jakREADME
,Makefile
itpDla SunOS 5.10
źródło
-min jest na minuty.
Spróbuj spojrzeć na stronę podręcznika.
dla więcej typów.
źródło
Jeśli nie masz „-mmin” w swojej wersji „find”, to „-mtime -0.041667” zbliża się do „w ciągu ostatniej godziny”, więc w twoim przypadku użyj:
więc jeśli X oznacza 6 godzin, to:
działa, ponieważ 24 godziny * 0,25 = 6 godzin
źródło
Oto, co można zrobić, idąc drogą, o której @iconoclast zastanawiał się w swoim komentarzu do innej odpowiedzi.
użyj crontab dla użytkownika lub
/etc/crontab
do utworzenia pliku/tmp/hour
:a następnie użyj tego, aby uruchomić polecenie:
źródło
*/1
bo godzina jest zbędna w twoim crontabie. Jest to to samo, co wstawianie * w polu godziny.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
źródło
Jeśli ktoś
find
tego nie ma,-mmin
a jeśli ktoś utknął z wartością,find
która akceptuje tylko wartości całkowite-mtime
, wówczas niekoniecznie wszystko stracone, jeśli weźmie się pod uwagę, że „starszy od” jest podobny do „nie nowszy niż”.Gdybyśmy byli w stanie stworzyć plik, który ma mime naszego czasu odcięcia, możemy zapytać
find
o zlokalizowanie plików, które nie są „nowsze niż” nasz plik referencyjny.Aby utworzyć plik, który ma prawidłowy znacznik czasu jest nieco zaangażowane, ponieważ system, który nie posiada odpowiedniego
find
prawdopodobnie ma również mniej niż zdolnydate
polecenia, które mogą robić takie rzeczy jak:date +%Y%m%d%H%M%S -d "6 hours ago"
.Na szczęście inne stare narzędzia, które mogą sobie z tym poradzić, choć w bardziej niewygodny sposób.
Weź pod uwagę, że sześć godzin to 21600 sekund. Chcemy znaleźć czas sprzed sześciu godzin w przydatnym formacie:
Instrukcja perla przyniosła użyteczną datę, ale należy ją lepiej wykorzystać:
Teraz rozwiązaniem dla tego starego systemu UNIX jest coś takiego:
Dobrym pomysłem może być również wyczyszczenie naszego pliku referencyjnego ...
źródło