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
Outras dicas deste autor
Melhore o desempenho do HISTORY
Windows antes no Grub do Ubuntu 10.04
Extrair a data de uma fotografia
Usando rm para apagar arquivos esquisitos
Cálculo da potência modular de forma eficiente
Leitura recomendada
Alterar hora de uma forma rápida
O comando export
Utilizando alias para agilizar comandos no Linux
Os run levels (Níveis de Execução)
80 Comandos para o pinguim (parte 2)
Comentários
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.
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
Mensagem
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
Boa garoto... anotado!
Mensagem
Boa garoto... anotado!
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
Mensagem
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
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?
Mensagem
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?
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
Mensagem
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
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.
Mensagem
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.
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.
Mensagem
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.
Muito legal essa de criar diretórios recursivamente Tenchi. Anotado também! :D
Falows, abraço.
Mensagem
Muito legal essa de criar diretórios recursivamente Tenchi. Anotado também! :D
Falows, abraço.
favoritadaço!! =D
Mensagem
favoritadaço!! =D
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
Mensagem
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
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.
Mensagem
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
Enviar