Ich versuche, den Inhalt einiger Verzeichnisse (aber nicht des Verzeichnisses selbst) folgendermaßen zu löschen:
find -type d -name someDirs -exec rm -rf {}/* \;
Aber es funktioniert nicht. Irgendwelche Tipps?
Das Problem mit Ihrem Befehl ist, dass die Platzhaltererweiterung von Ihrer Shell durchgeführt wird, bevor der Befehl tatsächlich aufgerufen wird. Da Ihre Shell keine passende Datei findet {}/*
(da Sie {}
im aktuellen Verzeichnis kein Verzeichnis mit einem Literalnamen haben ), *
wird die Datei unverändert an den Befehl übergeben, der dann geändert wird find
, um Dateien mit dem Namen Literal *
in Ihrem Verzeichnis zu löschen someDirs
Verzeichnisse, da der rm
Befehl (erneut) keine Platzhalter erweitert. Sie können dies durch Ausführen "debuggen"
find -type d -name someDirs -exec echo rm -rf {}/* \;
stattdessen. Um sicherzustellen, dass die Shell die Möglichkeit hat, Ihre zu erweitern *
, lassen Sie eine exec
weitere Shell erzeugen, die die Shell wie folgt erweitern kann *
(und den Befehl davor schützt, zuerst mit einfachen Anführungszeichen erweitert zu werden):
find -type d -name someDirs -exec sh -c 'rm -rf {}/*' \;
oder testen Sie es so:
find -type d -name someDirs -exec sh -c 'echo rm -rf {}/*' \;
Sie können das Verzeichnis (oder die Verzeichnisse) als Argumente find
angeben und anweisen, es mit der folgenden -mindepth
Option zu überspringen :
-mindepth Ebenen Wenden
Sie keine Tests oder Aktionen auf Ebenen an, die kleiner als Ebenen sind (eine nicht negative Ganzzahl).
-mindepth 1 bedeutet, dass alle Dateien mit Ausnahme der Befehlszeilenargumente verarbeitet werden.
Ihr Befehl wäre also:
find SomeDir1 SomeDir2 -mindepth 1 -exec rm -rf '{}' \+
find . -type f -delete
löscht alle Dateien im und unter dem aktuellen Verzeichnis und lässt die Verzeichnisstruktur in Ruhe.
Wenn Ihr Befehl find -delete nicht unterstützt (er ist etwas modern, aber seit einigen Jahren da), dann:
find . -type f -exec rm {} \;
Bearbeiten: Wie von Nate bemerkt, ist dies nicht die richtige Antwort.
someDirs
, nur nichtsomeDirs
selbst. Wir wollen also die Verzeichnisstruktur nicht in Ruhe lassen. Ich habe einen Kommentar hinterlassen und um Klarstellung gebeten.someDirs
, möglicherweise in unterschiedlichen Tiefen unterhalb des aktuellen Verzeichnisses.