Wie kann ich alle Dateien einer bestimmten Erweiterung im aktuellen Verzeichnis rekursiv löschen?


Zur akzeptierten Antwort gehen


Wie lösche ich sicher alle Dateien mit einer bestimmten Erweiterung (z. B. .bak ) aus dem aktuellen Verzeichnis und allen Unterordnern mithilfe einer einzigen Befehlszeile? Einfach, ich habe Angst zu verwenden, rm da ich es einmal falsch verwendet habe und jetzt brauche ich Rat.


551





2013-11-15




Anzahl der Antworten: 8


Sie müssen rm in diesem Fall nicht einmal verwenden , wenn Sie Angst haben. Verwendung find :

 find . -name "*.bak" -type f -delete
 

Verwenden Sie es jedoch mit Vorsicht. Zuerst ausführen:

 find . -name "*.bak" -type f
 

um genau zu sehen, welche Dateien Sie entfernen.

Auch stellen Sie sicher , dass -delete das letzte Argument ist in Ihrem Befehl. Wenn Sie es vor das setzen -name *.bak argument , wird alles gelöscht .

Siehe man find und man rm für weitere Informationen und siehe auch diese verwandte Frage zu SE:


870


2013-11-15

 find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
 

41


2014-04-04

Führen Sie zuerst den Befehl aus shopt -s globstar . Sie können das in der Befehlszeile ausführen, und es wird nur in diesem Shell-Fenster wirksam. Sie können es in Ihre legen .bashrc , und dann werden alle neu gestarteten Muscheln es abholen. Mit diesem Befehl werden **/ Übereinstimmungsdateien im aktuellen Verzeichnis und seinen Unterverzeichnissen rekursiv erstellt ( **/ bedeutet standardmäßig dasselbe wie */ : Nur in den unmittelbaren Unterverzeichnissen). Dann:

 rm **/*.bak
 

(oder gvfs-trash **/*.bak oder was hast du).


35


2013-11-15

Das Löschen von Dateien ist für mich nichts, wofür Sie verwenden sollten rm . Hier ist eine Alternative:

 sudo apt-get install gvfs     # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash"    # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak                   # trash the files (thus moving them to the trash bin)
 

Wie Flimm in den Kommentaren feststellt:

Das Paket trash-cli macht dasselbe wie gvfs-trash ohne die Abhängigkeit von gvfs.

So:

 sudo apt-get install trash-cli
 

Sie müssen dafür keinen Alias trash-cli erstellen , da das Paket einen Befehl bereitstellt trash , der das tut, was wir wollen.

Wie Eliah Kagan in ausführlichen Kommentaren deutlich macht, können Sie dies auch rekursiv machen find . In diesem Fall können Sie keinen Alias ​​verwenden. Bei den folgenden Befehlen wird davon ausgegangen, dass Sie installiert haben trash-cli . Ich fasse die Kommentare von Eliah zusammen:

Dieser Befehl sucht und zeigt alle .bak Dateien und Symlinks im aktuellen Verzeichnis oder seinen Unterverzeichnissen oder darunter an.

 find . -name '*.bak' -xtype f
 

Um sie zu löschen, hängen Sie an -exec mit dem trash Befehl:

 find . -name '*.bak' -xtype f -exec trash {} +
 

-xtype f Wählt Dateien und Symlinks zu Dateien aus, aber nicht zu Ordnern. Um auch .bak-Ordner zu löschen, entfernen Sie diesen Teil und verwenden Sie -execdir , um cannot trash non-existent Fehler für .bak Dateien in .bak Verzeichnissen zu vermeiden :

 find . -name '*.bak' -execdir trash {} +
 

22


2013-11-15

Wenn Sie alle Dateien eines bestimmten Typs, aber nur einen Ordner "deep" aus dem aktuellen Ordner löschen möchten:

 find . -maxdepth 2 -name "*.log" -type f -delete
 

-maxdepth 2, da das aktuelle Verzeichnis " . " als erster Ordner gilt.


5


2017-11-26

Schnelle Antwort:

  • Löschen Sie alle Dateien mit dem betrachteten Namen oder Postfix rekursiv:

    find . -name '*.pyc' -type f -delete

  • Löschen Sie alle Verzeichnisse mit dem betrachteten Namen rekursiv:

     find ~ -path '*/__pycache__/*' -delete‍‍‍
    find ~ -type d -name '__pycache__' -empty -delete‍‍‍
     

    Etwas weniger streng kontrolliert, aber in einer einzigen Zeile:

     find ~ -path '*/__pycache__*' -delete
     

[ HINWEIS ]:

d ist eine Verzeichnisoption und f eine Dateioption.


1


2019-02-25

Wenn Sie sich in einem Git-Repo befinden, können Sie Folgendes verwenden:

 git clean -fdx
 

Dies löscht nicht verfolgte Dateien und Dateien in .gitignore.


0


2018-08-09

Wenn Sie die Liste überprüfen möchten, bevor Sie die Dateien löschen, können Sie sie wiederholen.

 find . -name "*.bak" -type f | xargs echo rm -rf
 

Dadurch werden die Suchergebnisse aufgelistet, die über xargs an den Befehl rm weitergeleitet werden. Sobald Sie sich über die Liste sicher sind, können Sie das Echo im obigen Befehl ablegen.

 find . -name "*.bak" -type f | xargs rm -rf
 

0


2019-11-25