Desta forma, é um pouco mais de trabalho do que algumas outras soluções possíveis, mas quando eu estou excluindo arquivos eu gosto de poder checar o que está indo embora para sempre. Os passos abaixo pressupõem que você pode ver "aplicativo" no seu PWD, conforme indicado na sua pergunta.
Primeiro, crie um novo arquivo de texto contendo os nomes de todas as pastas que você deseja manter (não excluir), com uma pasta por linha. Salve-o como to-keep.txt
, por exemplo:
config
logs
Em seguida, copie o seguinte em um editor de texto e salve-o como rm-exclude.sh
para que todos os três arquivos estejam no mesmo diretório.
#!/usr/bin/env bash
find "./" -maxdepth 1 -type d ! -path "./" > to-delete.txt
dels='cat to-delete.txt'
readarray -t keeps < to-keep.txt
for keep in "${keeps[@]}"; do
dels='echo "$dels" | grep -v "$keep"'
done
echo "$dels" > to-delete.txt
Torne-o executável usando:
chmod +x rm-exclude.sh
Em seguida, execute-o com o seguinte, em que PATH
é o caminho para a pasta "aplicativo" do seu PWD. No seu exemplo, PATH
seria simplesmente application
.
./rm-exclude.sh PATH
Por fim, confira to-delete.txt
para ter certeza de que nada está sendo excluído e que não deveria ser, e execute:
readarray -t dels < to-delete.txt; for del in "${dels[@]}"; do rm -rf "$del"; done
Se você não se preocupa em verificar o conteúdo do arquivo txt, basta copiar e colar o comando acima até o final de rm-exclude.sh
, para que a execução do script faça tudo, desde que você tenha to-keep.txt
cheio. O resultado final deve ser que todas as subpastas diretas de application
não em to-keep.txt
serão excluídas, junto com seu conteúdo.