Ambiente
Sistema: Linux Mint 19 Canela.
Shell: Bash versão 4.4.19 (1).
Problema
Junto com centenas de cenários de teste, devo ter criado inúmeros diretórios de instalação temporários com arquivos como conteúdo, que preciso excluir toda vez manualmente. Parece assim:
$ ls --group-directories-first --classify
test1/ test2/ testA/ testFin/ decrypt-file-aes256* encrypt-file-aes256* Makefile openssl-encryption.tar.xz openssl-encryption.tar.xz.asc SHA512SUM
Eu quero automatizar este processo de limpeza.
Progresso
Descobri que o comando find
pode ser muito útil, por exemplo:
find . -maxdepth 1 -type d -exec rm -rf {} +
Isso, nos meus testes iniciais do terminal, mostrou estar funcionando, mas antes de colocá-lo no meu Makefile, alvo limpo, quero perguntar se há alguma medida de segurança que eu deva levar em conta?
Esse exemplo, no entanto, produz um pequeno erro:
rm: refusing to remove '.' or '..' directory: skipping '.'
Como proceder para ser mais específico aqui?
Alvo de Makefile 'limpo' corrigido atual
clean:
@echo; tput bold; tput setaf 3; echo Target: $@; tput sgr0; echo
@if [ $$(id --user) -eq 0 ]; then \
tput bold; tput setaf 1; echo "ERROR: Target '$@' has to be run as normal user!"; tput sgr0; echo; exit 1; \
fi
@if [ ! -f .safeclean-$(distrib_name) ]; then \
tput bold; tput setaf 1; echo "ERROR: Target '$@' has to be run from within its Makefile's directory!"; tput sgr0; echo; exit 1; \
fi
@ls -l | grep '^d' > /dev/null || echo "There are no more directories."
@for dir in *; do \
if [ -d "$$dir" ]; then rm --force --recursive --verbose "$$dir"; fi \
done
@rm --force --verbose $(distrib_name).tar.xz $(distrib_name).tar.xz.asc
@echo; tput bold; tput setaf 2; echo "Ok. Directory clean successful."; tput sgr0
Exemplo de saída (visual)