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.
command-line
files
rm
batch
user216038
quelle
quelle
rm *.bak
?rm *.bak
wird nicht für Unterverzeichnisse funktionieren.rm *.bak
werden nur alle Dateien gelöscht, die mit .bak im aktuellen Verzeichnis enden. Um auch Dinge in Unterverzeichnissen zu tun, die Sie zum Fummeln mit Globs benötigen, verwenden Sie die Option -r oder verwenden Sie das Beispiel find.rm -r *.bak
! Es werden auch Verzeichnisse entfernt, die.bak
mit ihrem gesamten Inhalt enden .-delete
das letzte Argument in Ihrem Befehl ist. Wenn Sie es vor das-name *.bak
Argument stellen, wird alles gelöscht.quelle
-delete
Flagge von zu verwendenfind
. Weitere Informationen finden Sie im GNU-Handbucheintrag zum Löschen von Dateien mit find .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:(oder
gvfs-trash **/*.bak
oder was hast du).quelle
Das Löschen von Dateien ist für mich nichts, wofür Sie verwenden sollten
rm
. Hier ist eine Alternative:Wie Flimm in den Kommentaren feststellt:
Damit:
Sie müssen dafür keinen Alias
trash-cli
erstellen , da das Paket einen Befehl bereitstellttrash
, 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 habentrash-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.Um sie zu löschen, hängen Sie an
-exec
mit demtrash
Befehl:-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
, umcannot trash non-existent
Fehler für.bak
Dateien in.bak
Verzeichnissen zu vermeiden :quelle
rm
zum Löschen von Dingen verwenden" ist eine kontroverse Aussage, aber ich muss zustimmen, dass es oft klüger ist, etwas zu verwenden, mit dem Sie Dinge rückgängig machen können.trash-cli
macht dasselbe wiegvfs-trash
ohne die Abhängigkeit vongvfs
.find . -name "*.bak" -type f
wastrash *.bak
löscht. Ist das wirklich was du meinst? Sie können Verzeichnisse mittrash
oder in den Papierkorb verschiebengvfs-trash
, estrash *.bak
werden jedoch nur Dateien und Verzeichnisse verschoben, deren Namen mit enden.bak
und die sich unmittelbar im aktuellen Verzeichnis befinden. Die Shell wird erweitert*.bak
, wirkt sich alsotrash *.bak
nicht auf.bak
Dateien in Unterverzeichnissen aus, die nicht selbst benannt sind.bak
.ls *.bak
(was ich denke du meinst) listet welchetrash *.bak
Trashes.find . -name '*.bak' -xtype f -exec trash {} +
Müllt alle.bak
Dateien in den Papierkorb.
. Es kann kein Alias verwendet werden. Installierentrash-cli
oder schreiben Siegvfs-trash
stattdessen. Hier ist ein Beispiel.-xtype f
Wählt Dateien und Symlinks zu Dateien aus, aber nicht zu Ordnern. Um auch.bak
Ordner zu löschen , verwenden Siefind . -name '*.bak' -execdir trash {} +
, umcannot trash non existent
Fehler für.bak
Dateien in.bak
Verzeichnissen zu vermeiden . Bitte zögern Sie nicht, dies in Ihrer Antwort zu verwenden.Wenn Sie alle Dateien eines bestimmten Typs, aber nur einen Ordner "deep" aus dem aktuellen Ordner löschen möchten:
-maxdepth 2, da das aktuelle Verzeichnis " . " als erster Ordner gilt.
quelle
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:
Etwas weniger streng kontrolliert, aber in einer einzigen Zeile:
[ HINWEIS ]:
d
ist eine Verzeichnisoption undf
eine Dateioption.quelle
Wenn Sie sich in einem Git-Repo befinden, können Sie Folgendes verwenden:
Dies löscht nicht verfolgte Dateien und Dateien in .gitignore.
quelle