Suchen von Dateien, die älter als x Tage sind, auf einem System mit einer abgespeckten Busybox

9

Ich muss Dateien, die älter als 1 Woche sind, in der Entwicklungseinheit suchen und löschen. Für dieses Gerät sind nur wenige Dienstprogramme verfügbar. -mtime findDas Prädikat ist nicht verfügbar. Wie überprüfe ich in diesem Fall alle Dateien, die älter als x Tage sind?

Ravi
quelle
2
Es ist unklar, was Sie mit " mtimeist nicht verfügbar" meinen . Es ist kein Dienstprogramm, dessen Namen ich erkenne.
Kusalananda
/ Pfad / zu / meinem / Ordner $ find -type f -mtime +7 delete find: nicht erkannt: -mtime
Ravi
Teilen Sie die Linux-Distribution, die Sie verwenden.
msp9011
3
Es sieht so aus, als wäre es eine Busybox ohne FEATURE_FIND_MTIME. Ist FEATURE_FIND_NEWERaktiviert? Funktioniert das find -newer? Ist Ihr testDienstprogramm oder der [eingebaute shSupport -nt?
Stéphane Chazelas
1
Sie können dies touch -ddate +%s[ file -nt other-file ]
umgehen,

Antworten:

11

-mtimeist ein Standardprädikat von find(im Gegensatz zu -delete), aber es sieht so aus, als hätten Sie eine abgespeckte Version von busybox, bei der die FEATURE_FIND_MTIMEFunktion zum Zeitpunkt der Erstellung deaktiviert wurde.

Wenn Sie die Busybox mit aktiviertem Status neu erstellen können, sollten Sie in der Lage sein:

find . -mtime +6 -type f -exec rm -f {} +

Oder wenn FEATURE_FIND_DELETEauch aktiviert ist:

find . -mtime +6 -type f -delete

Wenn nicht, können andere Optionen für eine Datei verwendet werden find -newer(vorausgesetzt, sie FEATURE_FIND_NEWERist aktiviert), für die eine Änderungszeit von einer Woche festgelegt ist.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Oder wenn -newernicht vorhanden ist , aber sh‚s [unterstützt -nt:

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f
Stéphane Chazelas
quelle
1
Ja, Busybox war hier eine leichtere Version. Nach dem Umbau find . -mtime +6 -type f -exec rm {} \;arbeitete für mich
Ravi
2

Von man find:

-atime n

Auf die Datei wurde zuletzt vor n * 24 Stunden zugegriffen. Wenn Sie herausfinden, wie viele Zeiträume vor 24 Stunden zuletzt auf die Datei zugegriffen wurde, wird jeder Bruchteil ignoriert. Um also mit -atime +1 übereinzustimmen, muss vor mindestens zwei Tagen auf eine Datei zugegriffen worden sein.

-ctime n

Der Status der Datei wurde zuletzt vor 24 Stunden geändert. In den Kommentaren zu -atime erfahren Sie, wie sich Rundungen auf die Interpretation der Änderungszeiten des Dateistatus auswirken.

Abhängig von den Anwendungsfällen der Dateien, die Sie löschen möchten, sind dies Ihre einzigen anderen Optionen für find. Warum ist mtimenicht verfügbar? Welches Dateisystem verwenden Sie? Haben Sie andere Optionen untersucht?

OneK
quelle
Das Stellen weiterer Fragen an das OP sollte als Klarstellung von Kommentaren und nicht als Antworten erfolgen .
Jeff Schaller