+1 por fazer a coisa certa, em vez de esperar que as ferramentas sejam suficientemente inteligentes. Ainda assim, uma noite, quando eu estava apenas aprendendo Linux, copiei o kernel para / tmp antes de fazer minha primeira recompilação. não foi bem-sucedido, mas apaguei o antigo, então eu disse 'não se preocupe, tenho uma cópia' apenas para descobrir que uma tarefa cron da meia-noite a apagara com todos os arquivos com mais de uma semana em / tmp! eu tive que recompilar novamente e desta vez fazê-lo corretamente, ou não reinicialize para mim!
Javier
melhor resposta postada :)
warren
3
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 {} \;
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.
shopt | grep ext
Você pode ver se o plug-in está ativado.fonte
A respeito:
Isso evita parte da "escassez" de um erro de digitação nos outros comandos.
fonte
Algo como
deveria fazer.
editar
Realmente deveria ser
impedir que se
find
repita abaixo de A.fonte
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 ...
fonte
Se você quiser ser mais flexível, mas manual, você pode fazer:
Dessa forma, você pode fazer mudanças gerais.
fonte
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 ...
fonte
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:
Em vez disso, use find -print0 com xargs -0, '-exec command {} +' ou -delete se a sua localização suportar.
fonte
Veja também aqui:
/programming/862388/delete-all-files-directories-except-two-specific-directories
fonte
Além do exemplo anterior de:
você também pode fazer:
para evitar ter que
cd some/subdir
primeiro.fonte