Pular para o conteúdo

Uso das chaves na linha de comando

Dica publicada em Linux / Comandos
Elgio Schlemer elgio
Hits: 16.902 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.

Uso das chaves na linha de comando

Um parâmetro pouco empregado e quase desconhecido em bash é o uso das chaves em um comando.

Melhor mesmo é um exemplo:

$ ls -la
total 8
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 .
drwxr-xr-x 80 elgio elgio 4096 2007-10-04 21:47 ..

$ mkdir Arquivo{01,02,03,04,05,06,07,08,09,10}-teste

$ ls -la
total 18
drwxr-xr-x 12 elgio elgio 4096 2007-10-04 21:50 .
drwxr-xr-x 80 elgio elgio 4096 2007-10-04 21:47 ..
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo01-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo02-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo03-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo04-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo05-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo06-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo07-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo08-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo09-teste
drwxr-xr-x 2 elgio elgio 4096 2007-10-04 21:50 Arquivo10-teste

É como se eu tivesse digitado:

mkdir Arquivo01-teste Arquivo02-teste ...

Quem não conhece, certamente iria fazer isto com um for:

$ for i in 01 02 03 04 05 06 07 08 09 10
do
mkdir Arquivo$i-teste
done


Mas pra que?

Veja outro exemplo:

$ echo teste{0,1,2,3,4,5,6,LIXO}
teste0 teste1 teste2 teste3 teste4 teste5 teste6 testeLIXO

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.

Usando rm para apagar arquivos esquisitos

Inserir comentários em regras do iptables

Enviar aspas em PHP de maneira menos suja

Windows antes no Grub do Ubuntu 10.04

Em C, escrever em arquivo fácil

Gerar arquivo da saída do MD5SUM

pbpaste e pbcopy no Linux

Combinando find com a variável PATH

Verificação constante de disponibilidade de serviços

Problema com MergeList [Resolvido]

#1 Comentário enviado por edirlf em 25/10/2007 - 19:32h
Amigo, há alguma maneira de fazer este mesmo comando

mkdir Arquivo{01,02,03,04,05,06,07,08,09,10}-teste

dessa maneira?

mkdir Arquivo{`seq -s ',' 30`}-teste

Tentei adaptar ele pra fazer isso, porém ele cria um único arquivo com todos os números concatenados. Tem jeito isso?

Grande abraço e parabéns pela dica.
#2 Comentário enviado por elgio em 25/10/2007 - 20:45h
Não dá.
Os {} são avaliados pelo shell antes do subcomando.

Mas assim funciona:

mkdir Arquivo{0{1..9},10}-teste

E no segundo caso:
mkdir Arquivo{1..30}-teste
#3 Comentário enviado por removido em 25/10/2007 - 21:12h
Boa garoto... anotado!
#4 Comentário enviado por tenchi em 26/10/2007 - 09:59h
Legal mesmo é criar diretórios "recursivamente":
$ mkdir -p tmp/{usr/{bin,share,doc,lib/pkgconfig},etc/{X11,init.d},var/{log,www/htmldocs/}}

O problema é que é muito fácil se perder entre tantos abre e fecha chaves...

PS: Porque eu sempre confundo chaves com colchetes? hauahua
#5 Comentário enviado por lipse em 29/10/2007 - 09:08h
Estou no trabalho e não posso fazer uns testes agora (máquinas win) mas, queria algo pra se utilizar com o "mv" na tarefa de renomear arquivos. Algo como:

$ mv Arquivo.Teste.{0{1..9},{10..20}}* arquivo_teste_{0{1..9},{10..20}}.ext

Alguém sabe se isso aí funcionaria?
#6 Comentário enviado por elgio em 29/10/2007 - 09:33h
Nem pensar!
O mv não funciona assim.

É sempre mv UmArquivo OutroArquivo

OU mv VariosArquivos Diretorio

NUNCA mv VariosArquivos OutroVariosArquivos

Para renomear vários assim somente com um laço usando for ou while
#7 Comentário enviado por lipse em 29/10/2007 - 11:56h
Valeu Elgio!

Eu imaginei que ele não aceitaria, só não tinha certeza... iria facilitar tanto...

Hehheheheh

Bom, continuo nos laços mesmo.

Abraço.
#8 Comentário enviado por edirlf em 29/10/2007 - 13:50h
Só por curiosidade mesmo, mas, alguém sabe o limite máximo de diretórios que posso criar com uma única linha no mkdir? Ou seja, o tamanho máximo da lista de argumentos.

Assim: mkdir diretorio01 diretorio02

até o diretório n?

Abraços.
#9 Comentário enviado por edirlf em 30/10/2007 - 13:45h
Muito legal essa de criar diretórios recursivamente Tenchi. Anotado também! :D
Falows, abraço.
#10 Comentário enviado por gabrielsp em 09/11/2007 - 21:19h
favoritadaço!! =D
#11 Comentário enviado por gabrielsp em 26/05/2008 - 08:13h
opa, alguem sabe se da pra renomear uma pasta em comum em varios pcs com nomes sequenciais com uso de chaves? por ex: mv micro{1..10}/home/usuario/teste /home/usuario/teste2

Abs
#12 Comentário enviado por elgio em 26/05/2008 - 10:03h
Isto já foi respondido 5 comentários acima, em 29/10/2007 - 09:33h.

O mv só suporta DOIS parâmetros ou vários se apenas o último for uma pasta e todos os anteriores forem arquivos.

Contribuir com comentário

Entre na sua conta para comentar.