Verwenden von „find“ in Bash zum Bedienen von Dateien basierend auf ihren Erweiterungsmustern

Verwenden von „find“ in Bash zum Bedienen von Dateien basierend auf ihren Erweiterungsmustern

Ich verwende den Befehl „Suchen“, um einige nutzlose Dateien mit den angegebenen Erweiterungen aus allen Unterordnern in dem Verzeichnis zu löschen, aus dem ich den Befehl ausführe.

find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete

ist es möglich, diese 4 Befehle zu einem zu kombinieren, um 4 Dateitypen mit einem Befehl zu entfernen? Ist es alternativ möglich, find zu verwenden, um ALLE Dateien zu entfernen, die NICHT zu den *.dlg-Erweiterungen gehören?

Antwort1

Ohne Anführungszeichen *.txtist schlecht. SiehefindDas Dienstprogramm gibt bei Verwendung von Platzhaltern nicht alle Dateien aus.

ist es möglich, diese 4 Befehle zu einem zu kombinieren?

Ja. SiehefindMehrere Befehle zu einem kombinieren.

find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …

(Hierbei werden drei Muster verwendet, da Ihr vierter Befehl ein Duplikat des ersten ist und es keinen Sinn macht, das gleiche Muster zweimal zu verwenden.)

Ist es alternativ möglich, findALLE Dateien zu entfernen, die NICHT zu den *.dlgErweiterungen gehören?

Ja (und ich nehme an, Sie möchten normale Dateien, nicht alleDateien):

find . -type f ! -name '*.dlg'        # -delete

Wenn der obige Befehl Dateien druckt, die Sie wirklich löschen möchten, führen Sie ihn mit #„removed“ aus.

Der ! -name '*.dlg'Test wird negiert -name '*.dlg'. Er ist genau dann erfolgreich, wenn er -name '*.dlg'fehlschlagen würde.

Sie haben -deletein der Frage verwendet, also findunterstützt Ihr es anscheinend. Benutzer mit weniger leistungsstarken findsehenfind: -exec rm {} \;vs. -delete– warum wird Ersteres allgemein empfohlen?

Beachten Sie, dass in Ihrem Fall „bare“ findwie folgt funktioniert find .: Ich habe find .explizit verwendet, da einige Implementierungen von findmindestens einen Pfad in der Befehlszeile erfordern.

verwandte Informationen