Pular para o conteúdo

rm - remover vários arquivos excetuando alguns

Dica publicada em Linux / Comandos
Sandro Marcell SMarcell
Hits: 42.100 Categoria: Linux Subcategoria: Comandos
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Removendo linhas duplicadas não-consecutivas

Declarando constantes em shell scripts

Copiar e colar no XTerm

CGI + Shell Script: gerando listagem de IPs disponíveis em sua rede

Otimizando o Firefox para conexões banda larga

Vídeo aula: Como colocar wallpaper comum a todos os usuários

Tecla ponto do teclado numérico mostrando vírgula em programas instalados via Wine

Samba 4 - Corrigindo erro "LDAP error 50 LDAP_INSUFFICIENT_ACCESS_RIGHTS"

Mensagens do boot

Correção automática de comandos no bash

#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

Entre na sua conta para comentar.