De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 04 de junho de 2014
Quando usamos o comando rm
geralmente fornecemos os nomes dos arquivos
ou então usamos algum metacaractere para limitar a seleção. Raramente fazemos
o contrário, ou seja, apagar todos os arquivos com exceção de alguns deles.
Por exemplo, o comando "rm *.doc
irá apagar TODOS os arquivos que tenham
o sufixo ".doc
".
Podemos sofisticar um pouco mais o uso do comando "rm
", utilizando a
tabela abaixo:
?(lista-de-argumentos) |
Casa com zero ou uma ocorrência do texto fornecida |
*(lista-de-argumentos) |
Casa com zero ou mais ocorrências do texto fornecido |
+(lista-de-argumentos) |
Casa com uma ou mais ocorrências do texto fornecido |
@(lista-de-argumentos) |
Casa com um dos argumentos fornecidos |
!(lista-de-argumentos) |
Casa com tudo menos o argumento fornecido |
Podem ser espeficados vários argumentos entre parênteses, basta separá-los com o
caractere "|
" (pipe).
Exemplos
arquivo1.doc
:
$ rm !(arquivo1.doc)
O caractere "!
" funciona como uma negação da expressão em parenteses.
arquivo1.doc
" e "arquivo2.doc
":
$ rm !(arquivo1.doc|arquivo2.doc)
.zip
":
$ rm !(*.zip)
.iso
" e ".zip
":
$ rm !(*.zip|*.iso)
Para que esta funcionalidade funcione, é preciso que o recurso extglob
esteja ativo:
$ shopt extglob
extglob off
Para ativar:
$ shopt -s extglob
Por padrão, esta funcionalidade já vem ativada em grande parte das distribuições GNU/Linux.
Este recurso pode ser usado com qualquer comando:
mv !(*.txt) /tmp
Neste exemplo, todos os arquivos que NÃO possuam o sufixo ".txt
"
são movidos para o diretório "/tmp/
".
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários (1)
Uma dica sobre a dica:
Como a expressão é usada como parâmetro e sem filtro (por exemplo entre apóstrofos) é provável que a expansão do parâmetro sea feita pela $SHELL. Por isso essas mesmas expressões podem ser usadas com outros comandos.
Por exemplo, para testar a expansão sem correr o risco do uso do rm(1) pode-se usar o comando "echo":
$ echo *.doc
Intranet.doc Proposta.doc Qualidade de Vida.doc