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 dirname
in den GNU-Coreutils:
for i in /tmp/*/Default; do
rm -R "$(dirname "$i")";
done
Vielleicht gibt es find
auch 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 dirname
mit einem versucht *
?
rm -d /tmp/*/Default
Ich verlasse einfach diese Site:https://linuxize.com/post/rm-command-in-linux/