it-swarm.com.de

Löschen Sie Dateien in allen Verzeichnissen eines Verzeichnisses

Ich musste kürzlich alle Dateien in ~ 40 Verzeichnissen löschen, die sich in einem übergeordneten Verzeichnis befanden, ohne die Verzeichnisse selbst zu löschen. Ich habe es manuell gemacht, aber gibt es eine effizientere Möglichkeit, dies zu tun? Gibt es einen Linux-Befehl, der das kann?

Für ein klareres Bild dessen, was ich meine:

HomeVerzeichnisName -> UnterverzeichnisName -> 4 Simulationsinfodateien

Ich hatte den obigen Pfad, außer dass es 40 Unterverzeichnisse gibt, von denen jedes 4 Simulationsdateien hat. Ich musste alle Simulationsinfodateien löschen, ohne die Verzeichnisse "subdirectoryName" zu löschen.

Es ist möglicherweise nicht möglich, da ich ungefähr eine Stunde lang überall gesucht habe, bevor ich mich endgültig für eine manuelle Suche entschieden habe.

2
Red Icing

Mit dem Befehl find ist es sehr einfach - verwenden Sie einfach -type f, um nur Dateien und keine Verzeichnisse zu finden

find /path/to/parent/directory -type f -delete

Standardmäßig kehrt find in Unterverzeichnisse zurück, sodass ab diesem Punkt alle Dateien in der Baumstruktur gefunden werden.

4
Zanna

aus dem übergeordneten Verzeichnis ausführen

find -type f -exec rm {} \;

zum Entfernen jeder Datei einzeln oder alternativ

find -type f -exec rm {} +

mehrere Dateien gleichzeitig in rm einreihen.

Für python Enthusiasten ist hier eine andere Lösung:

 python -c 'import os;[os.unlink(os.path.join(r,f)) for r,d,fs in os.walk(".") for f in fs]'
3

Aus dem übergeordneten Verzeichnis

rm */*

entfernt die 160 Simulationsinfodateien, ohne die 40 Verzeichnisse zu entfernen, die die Dateien enthalten.

(In diesem Fall spielt es keine Rolle, aber es kann in Zukunft nützlich sein zu wissen, dass rm niemals ein Verzeichnis entfernt, es sei denn, Sie fordern dies ausdrücklich mit dem Flag -r an.)

0
MJD