GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Entfernen Sie nur Dateien in Verzeichnissen unter Linux, NICHT in Verzeichnissen

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.


Linux
  1. So finden Sie eine Datei in Linux rekursiv in allen Verzeichnissen

  2. 9 Linux-Verzeichnisse, die Sie sichern müssen und eines, das Sie nicht sollten

  3. So entfernen Sie Dateien und Verzeichnisse in der Linux-Befehlszeile [Anfänger-Tutorial]

  4. Linux Dateien und Verzeichnisse löschen

  5. Erstellen und Entfernen von Dateien und Verzeichnissen unter Linux

So entfernen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile

So kopieren Sie Dateien und Verzeichnisse unter Linux

So entfernen (löschen) Sie das Verzeichnis in Linux

So entfernen Sie Dateien und Verzeichnisse unter Linux

So entfernen Sie Dateien und Verzeichnisse auf einem Linux-Terminal

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen