
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 *.txt
ist schlecht. Siehefind
Das Dienstprogramm gibt bei Verwendung von Platzhaltern nicht alle Dateien aus.
ist es möglich, diese 4 Befehle zu einem zu kombinieren?
Ja. Siehefind
Mehrere 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,
find
ALLE Dateien zu entfernen, die NICHT zu den*.dlg
Erweiterungen 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 -delete
in der Frage verwendet, also find
unterstützt Ihr es anscheinend. Benutzer mit weniger leistungsstarken find
sehenfind
: -exec rm {} \;
vs. -delete
– warum wird Ersteres allgemein empfohlen?
Beachten Sie, dass in Ihrem Fall „bare“ find
wie folgt funktioniert find .
: Ich habe find .
explizit verwendet, da einige Implementierungen von find
mindestens einen Pfad in der Befehlszeile erfordern.