it-swarm.com.de

So löschen Sie Dateien, die älter als X Stunden sind

Ich schreibe ein Bash-Skript, das alte Dateien löschen muss.

Es ist derzeit implementiert mit:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete

Dadurch werden die Dateien gelöscht, die älter als 1 Tag sind.

Was ist jedoch, wenn ich an diesem Tag eine feinere Auflösung benötige, etwa 6 Stunden alt? Gibt es eine nette saubere Möglichkeit, es zu tun, wie es find und -mtime verwendet?

180
Tom Feiner

Hat Ihr find das -mmin Möglichkeit? So können Sie die Anzahl der Minuten seit der letzten Änderung testen:

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete

Oder verwenden Sie tmpwatch , um denselben Job auszuführen. phjr empfahl auch tmpreaper in den Kommentaren.

281
Paul Dixon

Sie könnten zu diesem Trick: Erstellen Sie eine Datei vor 1 Stunde, und verwenden Sie die -newer file Streit.

(Oder benutze touch -t, um eine solche Datei zu erstellen).

9
xtofl

Hier ist der Ansatz, der für mich funktioniert hat (und ich sehe nicht, dass er oben verwendet wird)

$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null

löschen aller Dateien, die älter als 59 Minuten sind, während die Ordner intakt bleiben.

2
Axel Ronsin

Für SunOS 5.10

 Example 6 Selecting a File Using 24-hour Mode


 The descriptions of -atime, -ctime, and -mtime use the  ter-
 minology n ``24-hour periods''. For example, a file accessed
 at 23:59 is selected by:


   example% find . -atime -1 -print




 at 00:01 the next day (less than 24 hours  later,  not  more
 than one day ago). The midnight boundary between days has no
 effect on the 24-hour calculation.
1
Rajeev Rumale

Hier ist, was man tun kann, um auf dem Weg zu sein, über den sich @iconoclast in ihrem Kommentar zu einer anderen Antwort gewundert hat.

benutze crontab für user oder ein /etc/crontab um eine Datei zu erstellen /tmp/hour:

# m h dom mon dow user  command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1

und führen Sie dann den folgenden Befehl aus:

find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
0
satyr0909

Wenn Sie in Ihrer Version von "find" nicht "-mmin" haben, nähert sich "-mtime -0.041667" ziemlich "innerhalb der letzten Stunde". Verwenden Sie in Ihrem Fall also:

-mtime +(X * 0.041667)

also, wenn X 6 Stunden bedeutet, dann:

find . -mtime +0.25 -ls

funktioniert, weil 24 Stunden * 0,25 = 6 Stunden

0

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

0
Eragonz91

-mmin ist für Minuten.

Schauen Sie sich die Manpage an.

man find

für mehr Arten.

0
GavinCattell