So löschen Sie unter Linux einen Ordner basierend auf einem Unterordner

So löschen Sie unter Linux einen Ordner basierend auf einem Unterordner

Ich muss unter Linux eine Reihe von Ordnern basierend auf dem Namen eines Unterordners löschen.

/tmp/23245/Default
/tmp/34534/Default
/tmp/45435/Default
/tmp/65464/Main

Ich möchte alle Ordner aus /tmp löschen, die einen Unterordner von /Default enthalten

dieser Ordner

/tmp/23245/
/tmp/34534/
/tmp/45435/

Ich kann die Dateien mit folgendem Befehl finden: find /tmp/*/Default

Aber wie erhalte ich aus dieser Ausgabe den Namen des Ordners /tmp/Ordnername, um ihn an rm -rf weiterzuleiten?

Antwort1

Mit find können Sie Folgendes versuchen:

find /tmp -mindepth 2 -maxdepth 2 -name "*Default*" -type d -printf "%h\n" | xargs rm -R

Verwenden Sie mindepth und maxdepth, um sicherzustellen, dass wir Verzeichnisse 2 Ebenen unter /tmp analysieren, und verwenden Sie dann %h, um nur die führenden Verzeichnisse auszudrucken. Leiten Sie die Ausgabe an xargs rm -R weiter, um die führenden Verzeichnisse zu entfernen.

Antwort2

Es gibt dirnamein den GNU-Coreutils:

for i in /tmp/*/Default; do
  rm -R "$(dirname "$i")";
done

Vielleicht gibt es findauch einen Ansatz. Ich kenne mich damit nicht aus, daher überlasse ich das dir und/oder den anderen.

EDIT: Vielleicht rm -R "$(dirname /tmp/*/Default)"würde sogar funktionieren

Antwort3

Haben Sie es rm -d dirnamemit einem versucht *?

rm -d /tmp/*/Default

Ich verlasse einfach diese Site:https://linuxize.com/post/rm-command-in-linux/

verwandte Informationen