O @ChrisDown forneceu uma bash
solution que leva em conta a diferença de arquivos e diretórios, e também se não há arquivo para remover.
Dado que rm
falharia, no entanto, nessas situações, o comando poderia ser simplificado como (ainda com bash
):
shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png)
Lembre-se de redefinir as duas opções de shell para seus valores padrão. No meu caso extglob
já está definido em shells interativos, então eu só preciso
shopt -u nocaseglob
Ou execute esses dois comandos em um subshell:
(shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png))
Se você gostaria de ver com antecedência quais arquivos serão removidos, basta substituir o rm
por echo
.
Se você quiser que os arquivos ocultos também sejam removidos, adicione a opção dotglob
.