rm - remover vários arquivos excetuando alguns

Publicado por Sandro Marcell em 05/07/2010

[ Hits: 41.187 ]

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

Shell - operações envolvendo números em ponto flutuante

zsh: Prompt colorido dinamicamente

Detectando conflitos de IP

PostgreSQL - Bancos com diferentes encodings

Balanceando consultas de DNS no /etc/resolv.conf

Leitura recomendada

Movendo vários arquivos ou diretórios ao mesmo tempo para um diretório [Iniciante]

Visualizando tempo de conexão com o ac

Sinais de processos

Encontrando binários e arquivos de configuração

rename - Comando para renomear todos os arquivos para letra minúscula

  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts