Löschen Sie alle Unterverzeichnisse bis auf eines

Löschen Sie alle Unterverzeichnisse bis auf eines

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 …

verwandte Informationen