Ich möchte jede Datei löschen, aber die Ordnerstruktur beibehalten. Gibt es einen Weg?
HINWEIS: (Ich verwende GNU Bash 4.1.5).
Ich möchte jede Datei löschen, aber die Ordnerstruktur beibehalten. Gibt es einen Weg?
HINWEIS: (Ich verwende GNU Bash 4.1.5).
Antworten:
Versuche dies:
find . ! -type d -exec rm '{}' \;
Dadurch wird jede einzelne Datei mit Ausnahme von Verzeichnissen unterhalb des aktuellen Arbeitsverzeichnisses gelöscht. Gehen Sie mit diesem Befehl äußerst vorsichtig um.
Wenn die Version von find
auf Ihrem Computer dies unterstützt, können Sie auch verwenden
find . ! -type d -delete
find
Befehl sieht niemals die Anführungszeichen. Der {}
Marker wird nur als Argument angesehen.
-exec command {} +
" & dies " -exec command ;
". Ich habe \;
in der Vergangenheit einfach nie das '{}' benutzt.
Sie können den Befehl verwenden find
, um jede Datei zu suchen, aber die Verzeichnisstruktur beizubehalten:
$ find /some/dir -type f -exec rm {} +
In dieser Unix & Linux-Frage & Antwort mit dem Titel: Gnu findet und maskiert das {} für einige Shells - welche? Bei modernen Muscheln wie Bash scheint es nicht mehr notwendig zu sein , {}
mit einzelnen Häkchen ( '
) zu entkommen .
So löschen Sie einfach jede reguläre Datei im aktuellen Verzeichnis und in den Unterverzeichnissen rekursiv:
zsh -c 'rm **/*(.)'
Nur zsh verfügt über Globbing-Qualifikationsmerkmale , um Dateien nach Typ zuzuordnen . Der rm
Befehl funktioniert jedoch nicht für Verzeichnisse, sodass Sie ihn in bash verwenden können
shopt -s globstar
rm **/*
Dies funktioniert nur bei Befehlen rm
. Im Allgemeinen können Sie Folgendes verwenden find
:
find . -type f -delete
oder wenn dein find
nicht unterstützt -delete
:
find . -type f -exec rm {} +
Ich hatte ähnliche Anforderungen, um Dateien aus einem Pfad und seinen Unterverzeichnissen zu löschen (nach Zeit filtern), ohne die Verzeichnisstruktur zu löschen.
Und ich habe das folgende Format verwendet, das für mich gearbeitet hat.
find / test123 / home / test_file_hip / data / nfs -mtime +6 -type f -exec rm {} \;
Syntex: find (Pfad der Datei) -mtime (größer oder kleiner als Tage) -type f -exec rm {} \;
-type: Erwähne den Dateityp "f" für das Verzeichnis "d" -exec: führe den Befehl rm aus: entferne {}: Ausgabe des Befehls find
Hinweis: Testen Sie es, bevor Sie es verwenden. Bitte zögern Sie nicht zu korrigieren oder zu aktualisieren, wenn ich etwas verpasst habe.
find ... rm
bereits abgedeckt wurde, bin ich mir nicht sicher, ob dies ein wertvoller Beitrag als neue Antwort auf diese Frage ist.