Verzeichnis löschen wenn eine bestimmte Datei darin liegt

A

arndtw

Grünschnabel
Hallo zusammen,
ich benutze die bash unter verschiedenen Suse-Versionen und möchte gerne folgendes erreichen:

Ich möchte einen Verzeichnisbaum durchsuchen und wenn in einem Verzeichnis eine Datei bestimmten Namens liegt (als Löschmarkierung) dann soll dieses Verzeichnis mit samt Inhalt gelöscht werden.

Meine Versuche mit find scheitern bisher leider an der Ausgabe des find-Befehls.

find /home2/Struktur -name ACHTUNG_VERZEICHNIS_WIRD_ENTFERNT -print0 -printf %h |xargs -0 rm -rf

In den Verzeichnisnamen können Leerzeichen vorkommen.

Wie gehts richtig?

Danke

Gruss Wolfgang
 
Ein kleiner Workaround

Da das ganze im shell-Skript Sub-Forum angesiedelt ist, hoffe ich mal, ich kann die Operation auf mehrere Kommandos auslagern ;)
Code:
#!/bin/bash
find /home/user -mindepth 2 -name foo.bar -exec dirname {} >> tmp \;
cat tmp | while read line ; do rm -r "$line" ; done
rm tmp

Vorraussetzungen: Das Verzeichnis in dem das Skript ausgeführt wird muss schreibbar sein für den ausführenden User (wegen der tmp Datei). Außerdem sollte es in dem Ordner keine Datei namens 'tmp' geben. Man kann die tmp-Datei ja noch etwas ausgefallener benennen um Überschneidungen sehr unwahrscheinlich zu machen. Das '-mindepth 2' kommt, weil 'rm -r .' nicht möglich ist. (Sprich: es werden nur Unterverzeichnisse von /home/user und nicht /home/user selbst in das find-Kommando einbezogen.)
 
Zuletzt bearbeitet:
Danke,
so geht es. Der Befehl dirname war mir nicht bekannt.

Gruss Wolfgang
 

Ähnliche Themen

Werte aus Dateien lesen

Dateien löschen

Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

Bestimmte Dateien aus vielen Unterordnern löschen

Versteckten Ordner suchen und löschen

Zurück
Oben