Linux: remove o arquivo * .. mas não o arquivo1 e o arquivo2 [duplicado]

4

Geralmente no bash eu fiz

shopt -s extglob
rm !(filedontwantremove)

e remova todos os arquivos, exceto filedontwantremove

Mas se eu quiser remover todos os arquivos, exceto filedontwantremove e "antotherfilewithatdiferentialname"?

Existe uma solução de localização, mas eu prefiro algo como rm! ()

    
por elbarna 21.02.2016 / 02:55

2 respostas

5

Use apenas:

shopt -s extglob
rm !(filedontwantremove|antotherfilewithatotaldifferentname)

Note, entretanto, que o extglob geralmente está ativado por padrão em shells interativos no bash.
Faça isso para descobrir se está ativo:

$ shopt -p extglob
shopt -s extglob                    ### The -s means that it is set.

E execute este comando para descobrir a parte do manual que explica o que faz um !(pattern-list) idiom:

$ LESS=+/'If the extglob shell option is enabled' man bash

... a pattern-list is a list of one or more patterns separated by a |.

    
por 21.02.2016 / 03:49
1

Sim, existe uma solução find e é a maneira POSIX:

find . ! -name . -prune -type f ! -name 'file[12]' -exec rm {} +

Não é bem como usar globbing, desde quando ele filtrou apenas arquivos comuns.

    
por 21.02.2016 / 05:16

Tags