Risposte:
Bash ha esteso il globbing (prima prova, quindi rimuovere l'eco):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Puoi vedere se il plugin è abilitato.
Che dire:
mv A /tmp/
rm * -rf
mv /tmp/A .
Questo evita un po 'della "paura" di un refuso negli altri comandi.
Qualcosa di simile a
find . -type d -not -name A -exec rm -ir {} \;
dovresti ... dovrebbe.
modificare
Dovrebbe essere davvero
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
per impedire il find
ripetersi al di sotto di A.
di solito lo faccio elaborando un comando ls che lo fa per primo. non sono su una macchina unix, ma qualcosa del tipo:
ls -lda "[^ A]"
Una volta capito bene, esegui il pipe ad un comando
ls -lda "[^ A]" | xargs rm -rf
Sentiti libero di modificare sopra se ho sbagliato la mia espressione regolare ...
Ecco un modo. Fai attenzione a questo genere di cose, tuttavia, è così potente che può essere usato solo per il bene o il male ...
trova * -type d | grep -v "^ A" | xargs rm -rf
Non usare find come alcune persone hanno mostrato con -exec e rm senza passare -print0 per trovare e -0 per xargs. Verrà confuso sui nomi dei file con spazi o newline:
$ 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
Usa invece find -print0 con xargs -0, '-exec command {} +' o -delete se la tua ricerca lo supporta.