Übereinstimmende Dateien in allen Unterverzeichnissen löschen
Wie kann ich unter Linux alle .swp-Dateien in allen meinen Unterverzeichnissen entfernen?
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.
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.
Wenn Sie alle Dateien aus allen Unterordnern löschen möchten, können Sie den bereitgestellten Befehl verwenden,
$ find . -name \* -type f -delete