Abordagem Shell Script
Por padrão, globs não funcionam em um script BASH (embora você possa ativá-los com shopt
). Se o script de shell for executado por um interpretador não-BASH, os globs podem não funcionar.
Você pode obter o mesmo efeito usando o comando find
, que é como eu recomendaria fazê-lo (por causa de quanto mais controle você pode ter quando os requisitos aumentarem).
Experimente o tamanho: find . -mindepth 1 -maxdepth 1 -not -iname "*.sh" -exec rm -rf {} \;
Abordagem do Makefile
Outra abordagem que você poderia adotar:
Se você está fazendo algo que quer ser limpo depois, há uma boa chance de que um Makefile seja a ferramenta certa para o trabalho, em vez de um monte de clean.sh, build.sh, install.sh, etc.
Isso é especialmente verdadeiro se você quiser garantir que suas receitas sempre aconteçam em ordem ou se nem sempre quiser executar novamente as receitas que produzem uma saída.
Um Makefile simples que fazia a mesma coisa ficaria assim:
(note que o espaço em branco antes de rm
precisa ser uma tabulação porque é assim que os rolos são feitos)
SOURCES := $(wildcard *.sh)
CLEAN_FILES := $(filter-out $(SOURCES),$(wildcard *))
CLEAN_FILES := $(filter-out Makefile,$(CLEAN_FILES))
build: $(SOURCES)
YOUR_RECIPE_HERE
clean:
rm -rf $(CLEAN_FILES)