shopt -s extglob && rm !(non_delete_file)
ou
rm -f !(non_delete_file)
ou
find . ! -name non_delete_file -delete
Observe que o comando find
acima funcionará recursivamente - ele excluirá todos os arquivos e diretórios no diretório atual e em todos os subdiretórios. Se isso for um problema, use -type f
(para corresponder apenas aos arquivos) e -maxdepth 1
(para corresponder apenas ao diretório atual, ignorando os subdiretórios)
find . -type f -maxdepth 1 ! -name non_delete_file -delete