Réponses:
Bash a étendu le globbing (premier test, puis supprimez l'écho):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Vous pouvez voir si le plugin est activé.
Qu'en est-il de:
mv A /tmp/
rm * -rf
mv /tmp/A .
Cela évite une partie de la "peur" d'une faute de frappe dans les autres commandes.
Quelque chose comme
find . -type d -not -name A -exec rm -ir {} \;
devrait faire.
Éditer
Ça devrait vraiment être
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
pour éviter find
de se reproduire en dessous de A.
Je le fais habituellement en élaborant une commande ls qui le fait bien en premier. je ne suis pas sur une machine unix, mais quelque chose comme:
ls -lda "[^ A]"
Une fois que vous avez bien compris, dirigez-le vers une commande
ls -lda "[^ A]" | xargs rm -rf
N'hésitez pas à modifier ci-dessus si j'ai une mauvaise expression régulière ...
Voici une façon. Soyez prudent avec ce genre de chose, cependant, il est si puissant qu'il ne peut être utilisé que pour le bien ou le mal ...
trouver * -type d | grep -v "^ A" | xargs rm -rf
N'utilisez pas find car certaines personnes l'ont montré avec -exec et rm sans passer par -print0 pour trouver et -0 pour xargs. Il se confondra sur les noms de fichiers avec des espaces ou des retours à la ligne:
$ mkdir 'foo foo'
$ mkdir foo$'\n'foo
$ find . -type d -exec rm -ir {} \;
rm: cannot remove directory `.'
rm: remove directory `./foo\nfoo'? y
find: `./foo\nfoo': No such file or directory
rm: remove directory `./foo foo'? y
find: `./foo foo': No such file or directory
Utilisez plutôt find -print0 avec xargs -0, '-exec command {} +' ou -delete si votre recherche le prend en charge.