rm - remover vários arquivos excetuando alguns

Publicado por Sandro Marcell em 05/07/2010

[ Hits: 41.214 ]

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 + jQuery - Monitorando link de internet em tempo real

jQuery + PHP = Monitor de status

Copiando arquivos com caracteres especiais

Renomeando arquivos simultaneamente com apenas uma linha de comando

Otimizando o Firefox para conexões banda larga

Leitura recomendada

Comandos do smbclient

Convertendo imagens e documentos em texto puro (.txt)

Obtendo lista dos repositórios de pacotes em sistemas derivados do Debian

Repetição automática de comando

Como remover senhas de arquivos PDF por linha de comando

  

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