rm - remover vários arquivos excetuando alguns

Publicado por Sandro Marcell em 05/07/2010

[ Hits: 41.217 ]

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

Utilizando abreviações no Vim

Vim: fechamento automático de pares de caracteres

Copiando arquivos com caracteres especiais

Substituir espaços em branco por underlines em nome de arquivos

AWK - Validando endereços IPv4

Leitura recomendada

Vídeo do LinuxTips: DPKG e APT

Listando arquivos página por página (com em DOS dir/p)

Iniciando máquina virtual "automaticamente" no VirtualBox

Abrindo aplicativos gráficos como usuário root logado como usuário comum sem kdesudo ou gksudo

Terminal: um jeito inteligente de copiar e colar

  

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