AVISO: a execução de qualquer comando para excluir arquivos recursivamente é perigoso. Sempre, sempre teste antes de executar cegamente esses comandos perigosos e nunca os execute como usuário root (ou com sudo, etc.), nunca.
Isto é relativamente fácil de fazer com um pouco de bash, você pode até fazer um argumento que você passa se você for fazer muito isso. Mas, por uma vez, tente algo como o meu teste simples abaixo.
Primeiro, vou criar algumas pastas para testes:
cd test; mkdir -p one two three four five six .hidden
Em seguida, criarei um script bash (neste caso, rm.bash) com o seguinte conteúdo:
for i in 'ls -A'
do
if [ ! "${i}" == 'three' ] && [ ! "${i}" == $0 ]; then
echo "would delete ${i}"
else
echo "not deleting ${i}"
fi
done
Para explicar: ls -A
imprimirá todos os arquivos, exceto a pasta atual e o pai ( .
e ..
). Usamos essa lista com um loop for
para iterar todo o conteúdo. Eu decidi (arbitrariamente) que a única pasta que vamos deixar é "três" e que eu não quero apagar o próprio script rm.bash
.
Portanto, a condição if
só será verdadeira contanto que o arquivo / pasta em questão não seja denominado three
ou rm.bash
( $0
significa que isso funciona independentemente do nome do arquivo).
Em vez de executar isso imediatamente com rm -rf ${i}
(o que é perigoso), usei alguns comandos echo
para mostrar o que será excluído e o que não será.
Aqui foi o meu exemplo de saída:
would delete five
would delete four
would delete one
not deleting rm.bash
would delete six
not deleting three
would delete two
Depois de verificar se o script está tomando as medidas corretas, não excluindo coisas que não devem etc., você pode alterar o código para isso:
for i in 'ls -A'
do
if [ ! "${i}" == 'three' ] && [ ! "${i}" == $0 ]; then
rm -rf ${i}
fi
done