rm - remover vários arquivos excetuando alguns

Publicado por Sandro Marcell em 05/07/2010

[ Hits: 38.985 ]

Blog: http://sanmarcell.wordpress.com

 


rm - remover vários arquivos excetuando alguns



Imagine a seguinte situação: você tem um diretório com dezenas de arquivos e deseja excluí-los, exceto por alguns considerados importantes. Como fazer?

Bem, há duas maneiras (ou mais, depende de você!) para isso.

Método braçal: neste caso você copiaria os arquivos importantes para um diretório temporário, limparia o diretório desejado e depois moveria os arquivos do diretório temporário novamente para sua origem.

Método KISS (Keep It Simple Stupid!): você, como usuário inteligente que é, usaria apenas um único comando, curto e rápido.

rm !(arquivoA|arquivoB|...|arquivoN)

Mas o que é isso?!

Isso se chama "Extended Pattern Matching" e é apenas um dos vários existentes, está documentado no manual do Zsh, Ksh e Bash.

Como esse tal de EPM funciona?

Consulte as man pages para mais informações!

No nosso exemplo o funcionamento se dá da seguinte forma:

Case com tudo, exceto '!' por um dos padrões '(...|...)' informados.

Obs.: Para usuários do bash, pode ser necessário ativar o suporte a "Extended Globbing" com a seguinte opção:

shopt extglob

Mais detalhes: salve seu dia, consulte as man pages.

Falou!

Outras dicas deste autor

php-meter: Medidor que mostra o consumo de banda no link de internet

Jogando Tetris via terminal

sed - Removendo caracteres acentuados

Fluxbox: Wallpapers diferentes em cada área de trabalho

Copiando arquivos e mantendo a estrutura original de diretórios

Leitura recomendada

Acesso remoto - Sem solicitação de senha

Comandos básicos

Utilizando o comando cat

Como descompactar arquivos tar.xz no Ubuntu/Debian e derivados

Comprometendo a integridade de um arquivo

  

Comentários
[1] Comentário enviado por eldermarco em 05/07/2010 - 13:22h

É.. só não deixe para fazer os testes com os tais arquivos importantes... =]

[2] Comentário enviado por rony_souza em 16/07/2012 - 12:53h

Se eu der um rm *.jpg, eu apago todos arquivos .jpg. Existe uma maneira (bash do Linux) de apagar todos os arquivos EXCETO os jpg?

[3] Comentário enviado por SMarcell em 17/07/2012 - 09:10h


[2] Comentário enviado por rony_souza em 16/07/2012 - 12:53h:

Se eu der um rm *.jpg, eu apago todos arquivos .jpg. Existe uma maneira (bash do Linux) de apagar todos os arquivos EXCETO os jpg?


Essa dica é justamente pra isso amigão!

$ rm !(*.jpg)

[4] Comentário enviado por jojoneswillyan em 23/07/2014 - 18:46h

olá,
tenho um diretório que são nomeados com suas respectivas datas, exemplo:


2007-01
2007-02
2008-08
....

até 2014-07

quero deletar todas* as pastas exceto as do ano de 2014-*

Como seria esse Comando?

Grato pela atenção desde já.



Contribuir com comentário