versuchen, ein Skript zu erstellen, das Dateien löscht, die älter als X Tage sind. Es schien einfach genug, aber alle Dateien scheinen entfernt zu werden?
find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print -exec rm {} \;
Irgendwelche Ideen willkommen !?
Wäre es auch gut, Dateiinformationen für Übereinstimmungen auszudrucken, da meine Daten im Finder möglicherweise irreführend sind?
ctime
undmtime
und in den meisten Fällen wirdmtime
die Zeit verwendet (der Zeitpunkt, zu dem sich der Inhalt der Datei zuletzt geändert hat) und nichtctime
(der Zeitpunkt, zu dem sich die inode-bezogenen Informationen für die Datei geändert haben). Sehr selten zu sehenctime
auf diese Weise verwendet, so erwähne ich dies als Vorsichtsmaßnahme für Sie OP.Antworten:
Niemals vorschlagen
-exec rm ...
.rm
ist einfach zu gefährlich befehl. Immer zuerst trocken laufen lassen. IMHO ist es besser, dies zu verwenden:Dies wird den Trockenlauf anzeigen und erst wenn Sie zufrieden sind, können Sie den
rm
zum Ende hinzufügenWenn Sie diese
piped to xargs
Version verwenden, können Sie jederzeit weitere Filter hinzufügen, z.und ähnliche (leistungsstärkere) Kombinationen.
quelle
So beantworten Sie die in Ihrem Kommentar gestellte Frage: Sie können einzelne Kriterien verbinden, indem Sie sie nacheinander auflisten. Wenn Sie es vorziehen, können Sie
-a
oder-and
zwischen ihnen verwenden, aber diese sind redundant. Sie können auch-o
oder-or
für den Operator OR und Klammern verwenden. Diese müssen in Anführungszeichen gesetzt werden, um sie vor der Shell zu schützen, z. B. in\(
und\)
für die Gruppierung.Für die vollständigen Details führen Sie Folgendes aus:
man find
quelle
Es wird als gefährlich angesehen, -exec rm ohne first ls zu verwenden. Sie sollten dies wahrscheinlich zuerst überprüfen. Reverse Check ist auch ein guter Hinweis darauf, ob Ihr Timing korrekt ist.
ODER
-mtime
oder-atime
angemessener, aber vergleichen Sie das Ergebnis erneut und prüfen Sie, ob es tatsächlich das ist, was Sie brauchen.quelle
Versuche dies:
find . -ctime +30 | xargs rm -r 2> /dev/null
Aus irgendeinem Grund wird dies zweimal ausgeführt. Also leite ich die Fehler einfach zum Schwarzen Loch um
/dev/null
Genießen.
quelle