it-swarm.com.de

Was ist der Befehl zum Entfernen aller Dateien, aber nicht der Verzeichnisse?

Nehmen wir an, ich habe einen Verzeichnisbaum wie diesen:

FOLDER:
    file1
    file2
    file3
    Subfolder1:
        file1
        file2
    Subfolder2:
        file1
        file2

Wenn ich rm -r FOLDER/* verwende, wird alles in FOLDER einschließlich der Unterverzeichnisse gelöscht. Wie kann ich alle Dateien in FOLDER und seinen Unterverzeichnissen löschen, ohne die tatsächlichen Verzeichnisse zu löschen?

22
PKM

Was Sie versuchen, ist das rekursive Löschen. Dazu benötigen Sie ein rekursives Tool wie find.

find FOLDER -type f -delete
36

Mit bash:

shopt -s globstar  ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done

Hier wird über die globalen erweiterten Dateinamen iteriert und nur Dateien entfernt.

Das obige ist ein Probelauf. Wenn Sie mit den durchzuführenden Änderungen zufrieden sind, entfernen Sie echo, um es tatsächlich zu entfernen:

for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done

Schließlich deaktivieren Sie globstar:

shopt -u globstar

Mit zsh können Sie das Glob-Qualifikationsmerkmal nutzen:

echo -- FOLDER/**/*(.)

(.) ist das Glob-Qualifikationsmerkmal, das die Glob-Erweiterungen auf normale Dateien beschränkt.

Das Obige druckt nur die Dateinamen, um sie tatsächlich zu entfernen:

rm -- FOLDER/**/*(.)
13
heemayl

Wenn Ihre Version von find-delete nicht unterstützt, können Sie Folgendes verwenden, um alle Dateien im aktuellen Verzeichnis und darunter zu löschen.

find . ! -type d -exec rm '{}' \;
11
user508889