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.