Ich schreibe den folgenden Befehl, um alle Dateien zu löschen, die älter als 7 Tage sind, aber es funktioniert nicht:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Wie kann ich diese Dateien entfernen?
command-line
delete
find
rm
Malihe Pakyari
quelle
quelle
name
und sollte ein Leerzeichen stehen'*.gz'
.Antworten:
@Jos hat darauf hingewiesen, dass Sie ein Leerzeichen zwischen
name
und verpasst haben'*.gz'
. auch für den Befehl zu beschleunigen-type f
Option Ausführen des Befehls auf f iles nur.Der feste Befehl wäre also:
Erläuterung:
find
: Der Unix - Befehl zum Auffinden f iles / d irectories / l Tinten und etc./path/to/
: Das Verzeichnis, in dem die Suche gestartet werden soll.-type f
: finde nur Dateien.-name '*.gz'
: Dateien auflisten, die mit enden.gz
.-mtime +7
: Nur diejenigen mit einer Änderungszeit von mehr als 7 Tagen berücksichtigen.-execdir ... \;
: Führen Sie für jedes gefundene Ergebnis den folgenden Befehl in aus...
.rm -- '{}'
: entfernen Sie die Datei; Im{}
Teil wird das Suchergebnis durch das Ergebnis des vorherigen Teils ersetzt.--
Bedeutet, dass die Parameter für das Befehlsende verhindern, dass bei Dateien, die mit einem Bindestrich beginnen, ein Fehler angezeigt wird .Alternativ verwenden Sie:
Vom Mann zu finden :
Welches ist ein bisschen effizienter, weil es beträgt:
im Gegensatz zu:
wie in der
-exec
Methode.Ein alternativer und auch schnellerer Befehl verwendet den
+
Terminator von exec anstelle von\;
:Dieser Befehl wird
rm
nur einmal am Ende ausgeführt, anstatt jedes Mal, wenn eine Datei gefunden wird, und dieser Befehl ist fast so schnell wie die Verwendung der-delete
Option, wie in modernfind
:quelle
-delete
am Ende nicht gleich weitermachen ? Warum mit dem+
oder verwirren\;
?Gehen Sie beim Entfernen von Dateien mit find vorsichtig vor. Führen Sie den Befehl mit -ls aus, um zu überprüfen, was Sie entfernen
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Rufen Sie dann den Befehl aus dem Verlauf auf und fügen Sie ihn hinzu-exec rm {} \;
Begrenzen Sie den Schaden, den ein Suchbefehl anrichten kann. Wenn Sie Dateien aus nur einem Verzeichnis entfernen möchten, wird
-maxdepth 1
verhindert , dass find durch Unterverzeichnisse geht oder das gesamte System durchsucht, wenn Sie Tippfehler machen/media/bkfolder /
.Andere Grenzwerte, die ich hinzufüge, sind spezifischere Namensargumente wie das
-name 'wncw*.gz'
Hinzufügen einer neueren Uhrzeit-mtime -31
und das Zitieren der durchsuchten Verzeichnisse. Diese sind besonders wichtig, wenn Sie Bereinigungen automatisieren.find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
quelle