
Angenommen, im aktuellen Verzeichnis gibt es mehrere Unterverzeichnisse und eines davon heißt A.
Wie lösche ich mit Bash alle Unterverzeichnisse außer A?
Antwort1
Bash verfügt über erweitertes Globbing (erst testen, dann das Echo entfernen):
shopt -s extglob
echo rm -rf !(A)
Antwort2
find -maxdepth 1 -type d -not -name A -not -name "." -exec rm -ir {} \;
Antwort3
Wie wäre es mit:
mv A /tmp/
rm * -rf
mv /tmp/A .
Dadurch wird das Unannehmlichkeiten vermieden, das durch Tippfehler in den anderen Befehlen entstehen könnte.
Bitte beachten Siesich beim Ausführen des obigen Befehls rm * -rf nicht im Stammordner (/) zu befinden.
Antwort4
Normalerweise mache ich das, indem ich zuerst einen ls-Befehl ausarbeite, der es richtig macht. Ich bin nicht an einer Unix-Maschine, aber so etwas wie:
ls -lda "[^A]"
Sobald Sie es richtig gemacht haben, leiten Sie es an einen Befehl weiter
ls -lda "[^A]" | xargs rm -rf
Wenn mein regulärer Ausdruck falsch ist, können Sie ihn oben gerne bearbeiten …