Remova todos os arquivos, exceto um com rm

10

Existe alguma maneira de remover todos os arquivos em um diretório, exceto um com um determinado nome de arquivo? Por exemplo, se eu tivesse um diretório que contém os arquivos file1, file2e dontdelete. Haveria alguma maneira de excluir rapidamente file1, file2e não dontdelete? Eu sei que eu poderia fazer, rm file1 file2mas isso não funcionaria para um monte de arquivos. Além disso, estou no Mac OS X se isso faz diferença.

Wuffers
fonte
Curinga simples pode ser sua solução: o arquivo rm * removerá o arquivo1 e o arquivo2, mas não será excluído. Se suas necessidades forem mais complexas, dependendo da linguagem de script do shell, você poderá gerar uma lista de arquivos que deseja excluir usando uma expressão regular e canalizar isso para o comando rm.
therobyouknow
@ Rob: Sim, minha situação é mais complexa do que isso. E a resposta de Ignacio funcionou. Obrigado, no entanto!
Wuffers 01/01

Respostas:

16

Na festança:

shopt -s extglob
rm !(dontdelete)
Ignacio Vazquez-Abrams
fonte
1
+1 Uau solução muito sucinta. Terá isso em mente se eu precisar.
therobyouknow
isso pode ser estendido para incluir vários diretórios que você não wan para apagar
mcgrailm