Richtige Methode zum Löschen von Verzeichnisinhalten

Richtige Methode zum Löschen von Verzeichnisinhalten

Wie lösche ich richtig?alleden Inhalt eines Verzeichnisses, ohne das besagte Verzeichnis?
Ich habe beispielsweise die folgende Verzeichnisstruktur:

foo/
    bar1/
    bar2/
    x.txt

Ich möchte die Ordner bar1und bar2die Datei löschen x.txt,ohne zu löschen foo.

Beachten Sie auch Dateinamen mit Sonderzeichen, die möglicherweise ignoriert werden oder einen Fehler verursachen.


Bearbeitung Nr. 1 (30. September, 18:26 UTC):
Ich glaube, meine Frage ist kein Duplikat vondiese Frage, weil ich darum gebeten habe, zu löschenallesin einem Verzeichnis, während dies bei der anderen Frage nicht der Fall war und die Antworten keine solche Lösung enthielten.

Antwort1

Wenn Sie das Verzeichnis kennen, können Sie einen dieser Befehle verwenden:

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

Wenn Sie Dateien haben, die mit einem Punkt ( .) beginnen, benötigen Sie eine geänderte Version von rm.

$ rm -fr foo/{*,.*}

Beispiel

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

Wiederholen Sie dies mit einem neuen Dateiverzeichnis:

$ find foo/* -delete
$

Umgang mit Sonderzeichen

Wenn Ihr Verzeichnisname ein Leerzeichen enthält foo tastic, können Sie es in Anführungszeichen setzen, aber trotzdem ein Platzhalterzeichen verwenden:

Beispiel

$ rm -fr "foo tastic"/*

Spezielle Charaktere

Ich verwende diesen Trick oft, um zu sehen, was die Shell von meinen Dateinamen-Erfindungen hält, bevor ich sie ausführe. Im Beispielverzeichnis, das ich oben verwendet habe:

$ ls -1 "Datei "* Dateibereich1 Dateibereich2

$ ls -1d "dir "* Verzeichnis Leerzeichen1 Verzeichnis Leerzeichen2

Indem Sie diese Tests im Voraus durchführen, können Sie ein Gefühl dafür bekommen, welche Dateien/Verzeichnisse im Spiel sind, wenn ein Befehl verwendet wird, der den Glob enthält.

verwandte Informationen