Ich möchte alle Dateien aus einem Ordner und seinen Unterordnern mit einer bestimmten Eigenschaft suchen und löschen: dass sie kein Suffix mit drei Buchstaben haben. Wie machst Du das? Vielen Dank.
0
TL; DR; (was eine wirklich schlechte Idee ist, wenn man automatisch Sachen löscht)
find . ! -name "*.???" -type f -max-depth 1 -delete
Richtig erklärt und getestet:
Schritt 0: Einrichten der Testumgebung:
mkdir test
cd test
touch test1
touch test1.bar
touch test1.foo
touch test1.baz
touch test1.bazar
Schritt 1: Finden Sie alle Dateien mit einer Erweiterung von drei Buchstaben:
find . -name "*.???" -type f -print
./test1.bar
./test1.baz
./test1.foo
Schritt 2: Auswahl umkehren
find . ! -name "*.???" -type f -print
./test1
./test1.bazar
Schritt 3: Ersetzen Sie den -print
durch -delete
.
Wenn Sie nicht in Unterverzeichnisse wechseln möchten, fügen Sie a hinzu -max-depth=1
-maxdepth 1
, oder ist dies eines dieser Dinge mit mehrfach gültiger Syntax?-maxdepth n
) und einem älteren Ubuntu (-maxdepth levels
). Nun richtig in der Post. Danke fürs bemerken.Vorausgesetzt, Sie haben Bash-Version 4+ (Sie können mit überprüfen
bash --version
)Für die Rekursivität:
Im Allgemeinen würde ich empfehlen, diese Zeile in Ihre .bashrc-Datei einzufügen, da erweitertes Globbing und Globstar wirklich nützlich sind:
quelle
Du könntest es mit versuchen
find
.Zeigen Sie diese zuerst an, um sicherzustellen, dass Sie die richtigen Dateien erhalten:
Wenn Sie sicher sind, dass Sie sie löschen möchten, können Sie Folgendes verwenden:
oder wenn Sie den
-exec
Weg bevorzugen :Hinweis: Das
{} +
funktioniert nur ab einer bestimmten Version (siehe Handbuchman find
unter-exec
Punkt 2). Andernfalls könnten Sie verwenden,-exec -rfv {} \;
aber das verursacht einen hohen Aufwand, derrm
für jede Datei ausgeführt wird.Verwenden Sie dies im richtigen Ordner. Ansonsten durch
.
den Ordnernamen ersetzen .quelle
{} +
(siehe den zweiten Absatz über-exec
inman find
).-print0
. Ich wusste über den Aufwand von Bescheid-exec
. Deshalb bevorzuge ichxargs
. Wusste aber nichts davon{} +
. Änderte es in meiner Antwort. Vielen Dank.{} +
ab einer bestimmten Version verwendet werden. Überprüfen Sie immer das Handbuch;)