Respostas:
O Bash estendeu o globbing (primeiro teste e remova o eco):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Você pode ver se o plug-in está ativado.
A respeito:
mv A /tmp/
rm * -rf
mv /tmp/A .
Isso evita parte da "escassez" de um erro de digitação nos outros comandos.
Algo como
find . -type d -not -name A -exec rm -ir {} \;
deveria fazer.
editar
Realmente deveria ser
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
impedir que se find
repita abaixo de A.
Eu costumo fazer isso trabalhando com um comando ls que acerta primeiro. não estou em uma máquina unix, mas algo como:
ls -lda "[^ A]"
Depois de acertar, canalize-o para um comando
ls -lda "[^ A]" | xargs rm -rf
Sinta-se à vontade para editar acima se minha expressão regular estiver errada ...
Aqui está uma maneira. Tenha cuidado com esse tipo de coisa, porém, é tão poderoso que só pode ser usado para o bem ou para o mal ...
encontre * -tipo d | grep -v "^ A" | xargs rm -rf
Não use find, como algumas pessoas mostraram com -exec e rm sem passar -print0 para localizar e -0 para xargs. Ficará confuso nos nomes dos arquivos com espaços ou novas linhas:
$ 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
Em vez disso, use find -print0 com xargs -0, '-exec command {} +' ou -delete se a sua localização suportar.