POSIXly:
find . ! -name 'file.txt' -type f -exec rm -f {} +
removerá todos os arquivos regulares (recursivamente, incluindo os ocultos), exceto file.txt . Para remover diretórios, altere a opção -type f para -type d e adicione -r para rm .
Em bash , para usar rm -- !(file.txt) , você deve ativar extglob :
$ shopt -s extglob
$ rm -- !(file.txt)
(ou chamando bash -O extglob )
Observe que extglob só funciona em bash e na família de shell Korn. E usar rm -- !(file.txt) pode causar um erro Argument list too long .
Em zsh , você pode usar ^ para negar padrão com extendedglob ativado:
$ setopt extendedglob
$ rm -- ^file.txt
ou usando a mesma sintaxe com ksh e bash com as opções ksh_glob e no_bare_glob_qual ativadas.