In einer alten Version von Unix rm
löschte der Befehl Verzeichnisse, wenn sie leer waren. In der Manpage der Research Unix Eighth Edition für rm : "Wenn ein Eintrag ein Verzeichnis ist, wird er nur entfernt, wenn er leer ist." Ich mag dieses Verhalten, daher habe ich diesen Alias in meinem /etc/profile
: alias rm='rm -d'
Ich verwende die GNU-Coreutils-Version von rm
, in der -d
angewiesen wird rm
, Verzeichnisse zu entfernen, wenn sie leer sind.
So weit, ist es gut. Dieser Alias ermöglicht es mir, rm
wie früher zu verwenden. Ich möchte jedoch noch einen Schritt weiter gehen. ich würde gernerm
ein Verzeichnis zu löschen, auch wenn das Verzeichnis andere Verzeichnisse enthält, solange nur Verzeichnisse vorhanden sind. Es spielt keine Rolle, wie tief die Verzeichnisstruktur reicht, solange sich keine Dateien darin befinden. Ich möchte nur rm
alle Verzeichnisse entfernen, sobald Sie ganz unten sind .
Könnte dies als Alias geschrieben werden, der weiterhin als regulärer Alias fungiert rm
und alle an ihn übergebenen Dateien löscht?
rmdir -p
?mkdir -p a/b1/c2 && mkdir -p a/b2/c2; rmdir -p a/b1/c1;
, habe ich immer noch a, a / b2 und a / b2 / c2. Ich möchte nur die oberste Ebene (in diesem Fall a) übergebenrm
und alles darunter entfernen lassen.Antworten:
Sie möchten einen Verzeichnisbaum durchlaufen und prüfen, ob er etwas anderes als ein Verzeichnis enthält. Dies geht über
rm
die Möglichkeiten hinaus. Sie benötigen andere Tools wiefind
. Sie können die leeren Verzeichnisse unter einem bestimmten Verzeichnis auf diese Weise löschen (-depth
bewirkt, dass auch leere übergeordnete Verzeichnisse gelöscht werden):Hier ist eine Funktion, die für jedes Argument das Argument löscht, wenn es sich um eine Nicht-Verzeichnisdatei oder einen Verzeichnisbaum handelt, der nichts anderes als Verzeichnisse enthält. Beachten Sie, dass diese Funktion nicht atomar ist: Wenn sich eines der Argumente während der Ausführung ändert, wird möglicherweise eine Fehlermeldung angezeigt. Es ist jedoch sicher, dass kein Nichtverzeichnis in einem als Argument übergebenen Verzeichnis gelöscht wird.
quelle