Wie kann dasselbe Unterverzeichnis aus verschiedenen übergeordneten Verzeichnissen entfernt werden?

1

Angenommen, die folgende Dateistruktur:

/Parent1/
/Parent1/SubA/
/Parent1/SubB/
  ...
/Parent2/
/Parent2/SubA/
/Parent2/SubB/
  ...

Mit welchem ​​Befehl kann ich SubB rekursiv aus jedem übergeordneten Verzeichnis entfernen? Was ich getan habe, ist lange Hand (sehr lahm, aber ich werde es nur einschließen, damit klar ist, was ich versuche zu tun):

rm -rf Parent1/SubB
^1^2^
...
process91
quelle

Antworten:

2

Dies erreichen Sie mit den Befehlen findund xargs. Angenommen , Parent1 und Parent2 werden beide in einem Verzeichnis mit dem Namen SuperParent gespeichert . Sie könnten etwas in folgender Weise tun:

find /SuperParent -name SubB -type d -print0 | xargs -0 rm -rf

Dies leitet eine Liste von Verzeichnissen mit dem Namen SubB, die sich unter / SuperParent befindet, in den xargsBefehl weiter, der jedes rmVerzeichnis als Argument verwendet und mit dem Verzeichnis ausgeführt wird.

Gaff
quelle
1
Laufen Sie find /SuperParent -name SubB -type d | xargs echo rm -rfzuerst, um zu prüfen, was ausgeführt werden würde, wenn Sie besorgt sind. Wenn Sie viel zu viele Verzeichnisse haben, wird möglicherweise eine Fehlermeldung angezeigt, find /SuperParent -name SubB -type d | xargs -i rm -rf {}die Sie ausführen müssen (wobei jeder rm-Befehl einzeln ausgeführt wird)
Roy Rico,
1
Dies funktionierte fast für das, was ich brauchte, und schickte mich auf den richtigen Weg. Das einzige Problem, das ich sehen kann, ist, dass wenn es ein Verzeichnis mit dem Namen SubB gibt, das ein Kind von SubA ist (oder ein Geschwister von Parent1) und Sie dieses Verzeichnis nicht löschen wollten. Qualifizieren Sie dies mit codefind / SuperParent -mindepth 2 -maxdepth 2 -name SubB -type d | xargs rm -rf codescheint das Problem zu lösen. Danke für deine Antwort!
process91
Ah, das ist ein guter Punkt. Nizza Verlegenheit!
Gaff
1

Wenn es nicht zu viele ParentX gibt:

rm -rf Parent*/SubB
Ole Tange
quelle
Wow, das hat tatsächlich funktioniert! Und es ist so einfach und leicht zu merken! Vielen Dank!
process91
@slhck Bei mir funktioniert es, wenn Dateinamen Leerzeichen enthalten. Bitte geben Sie ein Beispiel an, bei dem dies nicht funktioniert.
Ole Tange
Oh, ich stehe korrigiert da. Ich weiß sowieso nicht, warum dies abgelehnt wurde.
Slhck