Ich habe ein Verzeichnis mit einer Reihe von Dateierweiterungen gemischt und ich möchte eine bestimmte Dateierweiterung auflisten (vielleicht so etwas wie grep *.mp3
) und löschen Sie sie beim Auflisten mit einer Ausgabe. Wie kann ich das machen oder wenn es einen Betrüger gibt, können Sie mich gerne markieren.
Beispiel:
grep "*.mp3" . | rm -fr
Akzeptierte Antwort:
Beginnen wir mit einem Verzeichnis mit drei mp3
Dateien:
$ ls *mp3
a.mp3 b.mp3 c.mp3
Lassen Sie uns sie jetzt löschen, nachdem wir aufgelistet haben, was wir löschen:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Danach wird die Datei mp3
Dateien sind weg:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Wie es funktioniert
-
`finden .
Dies startet eine
find
Befehl. Es sucht nach Dateien im aktuellen Verzeichnis.
. -
-maxdepth 1
Standardmäßig
find
durchsucht rekursiv Unterverzeichnisse. Dies sagt ihm, das nicht zu tun. Mit-maxdepth 1
, der Befehlfind
wird nur nachsehen, was es im aktuellen Verzeichnis findet, und keines der Unterverzeichnisse des aktuellen Verzeichnisses durchsuchen. -
-name '*.mp3'
Dies weist find an, nur nach Dateien mit dem
.mp3
zu suchen Erweiterung. -
-printf 'Deleting %p\n'
Dies weist find an, eine Nachricht über jede gefundene Datei auszugeben.
Sie können dies natürlich in eine andere Nachricht ändern, wenn Sie möchten. Wenn Sie keine Nachricht wünschen, kann diese Option ganz weggelassen werden.
-
-delete
Dies weist find an, jede Datei zu löschen.
Suche ohne Berücksichtigung der Groß-/Kleinschreibung
Wenn Sie auch Dateien namens .MP3
finden möchten oder .Mp3
usw., dann brauchen wir eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung und wir verwenden -iname
:
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete