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
findBefehl. Es sucht nach Dateien im aktuellen Verzeichnis.. -
-maxdepth 1Standardmäßig
finddurchsucht rekursiv Unterverzeichnisse. Dies sagt ihm, das nicht zu tun. Mit-maxdepth 1, der Befehlfindwird 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
.mp3zu 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.
-
-deleteDies 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