Gegeben :
- Ich habe eine Baumstruktur mit Ordnern
EmptyMe
auf verschiedenen Ebenen EmptyMe
Verzeichnisse enthalten Unterverzeichnisse und Dateien
Erforderlich :
- Leeren Sie den Inhalt von
EmptyMe
Verzeichnissen ( einschließlich ihrer Unterverzeichnisse), während Sie diese Verzeichnisse behalten (ohne sie zu löschen).
Frage :
Was ist der Unix-Befehl, um alle EmptyMe
Verzeichnisse der aktuellen Ebene rekursiv zu finden und ihren gesamten Inhalt (einschließlich Unterverzeichnisse) zu löschen, während EmptyMe
Verzeichnisse auf der Disc bleiben?
Mein Versuch :
$ find . -name 'EmptyMe' -type d -exec rm -- {} +
rm: cannot remove `./a/b/c/d/EmptyMe': Is a directory
Wie Sie sehen können, hat dieser Befehl versucht, ihn zu entfernen EmptyMe
, im Gegensatz zu seinem Inhalt.
command-line
find
rm
Temuri
quelle
quelle
find . -name 'EmptyMe' -type d -exec find {} -type f -delete \;
Lassen Sie mich wissen, wenn Sie dies als tatsächliche Antwort wollenEmptyMe
.-mindepth 1
den verschachtelten Befehl und entfernen,-type f
weil OP auch Verzeichnisse entfernen möchte.Antworten:
Testlauf:
Echte Löschung:
-path '*/EmptyMe/*'
bedeutet , dass alle Elemente in einem Verzeichnis mit dem Namen übereinstimmenEmptyMe
.quelle
Eine Option, die verwendet werden kann, besteht darin, die Befehle zu verschachteln:
Das äußere
find -type d -name 'EmptyMe'
findet die erforderlichen Verzeichnisse und führt den innerenfind
Befehl über aus-exec ... \;
. Der innere Befehl wird in das gefundene Verzeichnis verschoben (auf das über verwiesen wird{}
). Da wir hier das-delete
Flag verwenden, sollte er der Tiefensuche folgen und Dateien und dann Unterverzeichnisse entfernen.quelle
Dies funktioniert, gibt jedoch Fehler aus, wenn die
EmptyMe
Verzeichnisse leer sind.Fehlerbeispiel:
quelle
EmptyMe
Verzeichnisse Inhalt haben.