2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Übereinstimmende Dateien in allen Unterverzeichnissen löschen

Wie kann ich unter Linux alle .swp-Dateien in allen meinen Unterverzeichnissen entfernen?

Antworten (5)

147
147
147
2010-02-22 13:59:15 +0000

Um alle *.swp-Dateien unterhalb des aktuellen Verzeichnisses zu entfernen, verwenden Sie den Befehl find in einer der folgenden Formen:

  • find . -name \*.swp -type f -delete

Die Option -delete bedeutet, dass find die entsprechenden Dateien direkt löscht. Dies ist die beste Übereinstimmung mit der eigentlichen Frage von OP.

Die Verwendung von -type f bedeutet, dass find nur Dateien verarbeitet.

  • find . -name \*.swp -type f -exec rm -f {} \; find . -name \*.swp -type f -exec rm -f {} +

Die Option -exec erlaubt find, einen beliebigen Befehl pro Datei auszuführen. Bei der ersten Variante wird der Befehl einmal pro Datei ausgeführt, bei der zweiten Variante werden so wenige Befehle wie möglich ausgeführt, indem {} durch so viele Parameter wie möglich ersetzt wird.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

Das Piping der Ausgabe an xargs wird für komplexere Befehle pro Datei verwendet, als es mit -exec möglich ist. Die Option -print0 weist find an, Übereinstimmungen mit ASCII NULL anstelle eines Zeilenumbruchs zu trennen, und -0 weist xargs an, NULL-getrennte Eingabe zu erwarten. Dies macht das Pipe-Konstrukt sicher für Dateinamen, die Leerzeichen enthalten.

Siehe man find für weitere Details und Beispiele.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Das Löschen selbst durchführen zu lassen, beseitigt jegliches Risiko für im Dateinamen eingebettete Leerzeichen, … Für zusätzliche Sicherheit können Sie auch -type f nur für Dateien hinzufügen.

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
2
2
2
2010-02-22 14:04:52 +0000

Für die Suche unter meinem Heimatverzeichnis (und unter Verwendung der GNU-Programme ‘find’ und ‘xargs’) würde ich verwenden:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

Die Verwendung von ‘-print0’ und ‘-0’ bedeutet, dass die Namen durch ASCII-NUL-‘\0’-Zeichen getrennt werden, und dies behandelt Dateipfade mit Leerzeichen usw. in den Namen. Wenn Sie glauben, dass Sie Verzeichnisse (oder Gerätedateien oder FIFOs oder andere Nicht-Dateien) unter Ihrem Verzeichnis haben, die mit ‘.swp’ enden, könnten Sie die Option ‘-type f’ zu ‘find’ hinzufügen. Wenn Sie nur Verzeichnisse haben, wird der obige Befehl diese nicht geräuschvoll entfernen.

0
0
0
2019-11-17 04:04:10 +0000

Wenn Sie alle Dateien aus allen Unterordnern löschen möchten, können Sie den bereitgestellten Befehl verwenden,

$ find . -name \* -type f -delete