os x terminal - Entfernt Dateien, die älter als x Tage sind


7

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?


Entschuldigung. Funktioniert. Kann ich mehrere Parameter haben? Dh eine Größe angeben? -ctime +30 UND -size + 10000000c
v3nt

2
Es gibt einen signifikanten Unterschied zwischen ctimeund mtimeund in den meisten Fällen wird mtimedie Zeit verwendet (der Zeitpunkt, zu dem sich der Inhalt der Datei zuletzt geändert hat) und nicht ctime(der Zeitpunkt, zu dem sich die inode-bezogenen Informationen für die Datei geändert haben). Sehr selten zu sehen ctimeauf diese Weise verwendet, so erwähne ich dies als Vorsichtsmaßnahme für Sie OP.
Ian C.

Antworten:


13

Niemals vorschlagen -exec rm ....

rmist einfach zu gefährlich befehl. Immer zuerst trocken laufen lassen. IMHO ist es besser, dies zu verwenden:

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 -n1

Dies wird den Trockenlauf anzeigen und erst wenn Sie zufrieden sind, können Sie den rmzum Ende hinzufügen

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 rm

Wenn Sie diese piped to xargsVersion verwenden, können Sie jederzeit weitere Filter hinzufügen, z.

find /some/where -mtime +3d -print0 | grep -ziE '\.(jpg|png|gif)$' | xargs -0 rm

und ähnliche (leistungsstärkere) Kombinationen.


Diese Antwort hätte akzeptiert werden sollen. Danke, habe gerade danach gesucht.
user14492

1
Was ist -ctime +30? Ist es 30 Tage vorher? oder 30 Minuten vor Dateien. Bitte erkläre.
Tough Guy

@ToughGuy Wenn keine Einheiten angegeben sind, wird dieser Primärwert als wahr ausgewertet, wenn die Differenz zwischen dem Zeitpunkt der letzten Änderung der Dateistatusinformationen und dem Zeitpunkt des Beginns der Suche, aufgerundet auf den nächsten vollen 24-Stunden-Zeitraum, n 24-Stunden-Zeiträume beträgt . - aka: days
jm666

2

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 -aoder -andzwischen ihnen verwenden, aber diese sind redundant. Sie können auch -ooder -orfü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


0

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.

find . -maxdepth 1 -type f -mtime -30d -exec ls -latr {} \;

ODER

find . -maxdepth 1 -type f -atime -30d -exec ls -latr {} \;
  1. Beschränken Sie Ihr Suchergebnis. Stellen Sie sicher, wonach Sie ausdrücklich fragen.
  2. Vergleichen Sie, ob das gegenteilige Ergebnis tatsächlich von Ihrem ursprünglichen Befehl ausgeschlossen wurde.
  3. Wahrscheinlich -mtimeoder -atimeangemessener, aber vergleichen Sie das Ergebnis erneut und prüfen Sie, ob es tatsächlich das ist, was Sie brauchen.

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.