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.
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.
Antworten:
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 -printdurch -delete.
Wenn Sie nicht in Unterverzeichnisse wechseln möchten, fügen Sie a hinzu -max-depth=1
-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)
shopt -s extglob ## turn on extended globbing
rm -- !(*.???)
Für die Rekursivität:
shopt -s extglob globstar
rm -- **/!(*.???)
Im Allgemeinen würde ich empfehlen, diese Zeile in Ihre .bashrc-Datei einzufügen, da erweitertes Globbing und Globstar wirklich nützlich sind:
shopt -s extglob globstar
Du könntest es mit versuchen find.
Zeigen Sie diese zuerst an, um sicherzustellen, dass Sie die richtigen Dateien erhalten:
find . -type f ! -name "*.???"
Wenn Sie sicher sind, dass Sie sie löschen möchten, können Sie Folgendes verwenden:
find . -type f ! -name "*.???" -print0 | xargs -0 rm -rfv
oder wenn Sie den -execWeg bevorzugen :
find . -type f ! -name "*.???" -exec rm -rfv {} +
Hinweis: Das {} +funktioniert nur ab einer bestimmten Version (siehe Handbuch man findunter -execPunkt 2). Andernfalls könnten Sie verwenden, -exec -rfv {} \;aber das verursacht einen hohen Aufwand, der rmfür jede Datei ausgeführt wird.
Verwenden Sie dies im richtigen Ordner. Ansonsten durch .den Ordnernamen ersetzen .
{} +(siehe den zweiten Absatz über -exec in man find).
-print0. Ich wusste über den Aufwand von Bescheid -exec. Deshalb bevorzuge ich xargs. Wusste aber nichts davon {} +. Änderte es in meiner Antwort. Vielen Dank.
{} +ab einer bestimmten Version verwendet werden. Überprüfen Sie immer das Handbuch;)
-maxdepth 1, oder ist dies eines dieser Dinge mit mehrfach gültiger Syntax?