Da dies in der Google-Suche weit oben steht, lautet die einfachste Antwort:
rm $directoryPath/*
wobei $directoryPath das Verzeichnis ist, das Sie leeren möchten. Credits sollten an cbm3384 gehen (das aus irgendeinem Grund negative Stimmen für diese Antwort erhalten hat, warum?)
Wenn Sie nicht bestätigen möchten:
rm -f $directoryPath/*
Wenn Sie nicht glauben, versuchen Sie es mit man rm
oder
mkdir -p 1/2/3; echo 'hello1' > 1/hello1.txt; echo 'hello2' > 1/2/hello2.txt;echo 'hello3' > 1/2/3/hello3.txt
rm 1/2/*
Das obige erstellt eine Verzeichnisstruktur, die „helloX.txt“ in jedem Ordner enthält (X ist die Verzeichnisebene). rm 1/2/*
löscht hello2.txt
und lässt die andere Struktur intakt.
Auch rm */*/*
löscht nur hello2.txt
. Es ist das einzige, das mit dem Muster übereinstimmt.
Nur ein Beispiel für ein Makefile, das das tmp-Verzeichnis von cakephp bereinigt und die Verzeichnisstruktur intakt lässt:
clean:
-rm -f tmp/*
-rm -f tmp/*/*
-rm -f tmp/*/*/*
-rm -f tmp/*/*/*/*
Minus vor dem rm
bedeutet "bei Fehlern nicht anhalten" (nicht entferntes Verzeichnis gibt einen Fehler zurück). Wenn Sie möchten, dass ein Level gespeichert wird, entfernen Sie einfach diese Zeile, z. zweite rm-Zeile entfernt Protokolle.
Lassen Sie mich wissen, wenn Sie ein System haben, das etwas anderes tut (BSD?).
BEARBEITEN: Ich habe dies auf Ubuntu 12.04, OSX Lion und Sourceforge.net Shell getestet. Alle verhalten sich wie oben erklärt.
find PATH -maxdepth 1 -type f -delete
ABER Dies wird Sie nicht zur Bestätigung auffordern oder ausgeben, was es gerade gelöscht hat. Führen Sie es daher am besten zuerst ohne die Aktion -delete aus und prüfen Sie, ob es sich um die richtigen Dateien handelt.
Sie können find
verwenden mit -type f
nur für Dateien und -maxdepth 1
also find
sucht nicht nach Dateien in Unterverzeichnissen von /path/to/directory
. rm -i
fordert Sie bei jedem Löschvorgang auf, damit Sie den Löschvorgang bestätigen oder ablehnen können. Wenn es Ihnen egal ist, bei jedem Löschvorgang nach einer Bestätigung gefragt zu werden, ändern Sie ihn in rm -fv
(-f
für zwingen das Löschen). Die -v
Flag bewirkt, dass bei jedem Löschen eine Nachricht ausgegeben wird, welche Datei gerade gelöscht wurde.
find /path/to/directory -maxdepth 1 -type f -exec rm -iv {} \;
Dies sollte die Kriterien erfüllen:
NICHT Verzeichnisse
NICHT Unterverzeichnisse
NOT-Dateien in diesen Unterverzeichnissen.