Respuestas:
Bash ha extendido globbing (primera prueba, luego elimine el eco):
shopt -s extglob
echo rm -rf !(A)
shopt | grep extPuede ver si el complemento está habilitado.
Qué pasa:
mv A /tmp/
rm * -rf
mv /tmp/A .
Esto evita algo del "miedo" de un error tipográfico en los otros comandos.
Algo como
find . -type d -not -name A -exec rm -ir {} \;
debería hacer.
editar
Realmente debería ser
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
para evitar que se findrepita debajo de A.
Normalmente hago esto elaborando un comando ls que lo hace bien primero. No estoy en una máquina Unix, pero algo así como:
ls -lda "[^ A]"
Una vez que lo hagas bien, canalízalo a un comando
ls -lda "[^ A]" | xargs rm -rf
Siéntase libre de editar arriba si tengo mi expresión regular incorrecta ...
Aquí hay una manera. Tenga cuidado con este tipo de cosas, sin embargo, es tan poderoso que solo puede usarse para bien o para mal ...
encontrar * -tipo d | grep -v "^ A" | xargs rm -rf
No use find como algunas personas han mostrado con -exec y rm sin pasar -print0 para encontrar y -0 a xargs. Se confundirá en los nombres de archivos con espacios o líneas nuevas:
$ 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
En su lugar, use find -print0 con xargs -0, '-exec command {} +', o -delete si su búsqueda lo admite.