Löschen Sie übereinstimmende Dateien in allen Unterverzeichnissen

77

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

Alex
quelle
3
Vergessen Sie nicht, sich Programme wie trash-cli anzuschauen, damit Sie das Löschen rückgängig machen können, anstatt rm zu verwenden. code.google.com/p/trash-cli (In allen folgenden Antworten ersetzen Sie einfach "rm" durch "trash".)

Antworten:

137

Entfernen Sie alle * .swp-Dateien unter dem aktuellen Verzeichnis. Verwenden Sie den findBefehl in einer der folgenden Formen:

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

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

    Mit " -type fmeans find" werden nur Dateien verarbeitet.

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

    Mit der Option -execfind kann ein beliebiger Befehl pro Datei ausgeführt werden. Die erste Variante führt den Befehl einmal pro Datei aus, und die zweite Variante führt so wenig Befehle wie möglich aus, indem sie {}durch so viele Parameter wie möglich ersetzt.

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

    Das Weiterleiten der Ausgabe an xargswird für komplexere Dateibefehle verwendet, als dies mit möglich ist -exec. Die Option -print0sagt findEinstimmungen mit ASCII NULL anstelle eines Newline zu trennen, und -0sagt xargsNULL getrennten Eingang zu erwarten. Dies macht das Pipe-Konstrukt sicher für Dateinamen, die Leerzeichen enthalten.

Sehen Sie man findfür weitere Informationen und Beispiele.

Lachlan Roche
quelle
16

find . -name '*.swp' -delete

Wenn find den Löschvorgang selbst ausführt, wird das Risiko von in Dateinamen eingebettetem Speicherplatz beseitigt -type f.

Zeograd
quelle
4
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
user31894
quelle
2

Für die Suche in meinem Home-Verzeichnis (und unter Verwendung der GNU-Befehle 'find' und 'xargs') würde ich Folgendes 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 begrenzt werden. Dabei werden Dateipfade mit Leerzeichen usw. in den Namen behandelt. Wenn Sie der Meinung sind, dass sich in Ihrem Verzeichnis Verzeichnisse (oder Gerätedateien oder FIFOs oder andere Nicht-Dateien) befinden, die mit ".swp" enden, können Sie die -type fOption "Suchen" hinzufügen . Wenn Sie nur Verzeichnisse haben, können diese mit dem obigen Befehl nicht entfernt werden.

Jonathan Leffler
quelle