Mas o que você não deve saber é do uso das chaves como forma de construir strings arbitrárias. E mais, se você é como o meu amigo Flávio Amieiro e já sabia disso, aposto que você não sabia que pode usar auto-completar e as chaves {} {} {} {}!!!!
Digamos que estou num diretório assim:
rodolfo@lisa:/tmp/bash-tricks$ ls
foo_ball.egg foobaz foo_spam2.egg foo_spam.egg hello.c
foo-bar foo_spam1.egg foo_spam3.egg foo.txt
Podemos auto-completar nomes com TAB. Por exemplo, digitar "h" seguido de TAB vai resultar em "hello.c".
Digamos que quero fazer um diff entre foo_spam2.egg e foo_spam3.egg. Uma forma de fazer isso seria digitar o comando completo:
diff foo_spam2.egg foo_spam3.egg
Depois de ler isto aqui, espero que sua forma de fazer seja assim:
diff foo_spam{2,3}.egg
O Bash expande automaticamente tudo que estiver dentro das chaves. Itens são separados por vírgula, sem espaços. Se quiser colocar um espaço ou vírgula na string gerada, escape com uma contra-barra \.
Exemplo:
rodolfo@lisa:/tmp/bash-tricks$ echo O Bash é {legal\,,muito\ poderoso,e\ divertido.}
O Bash é legal, muito poderoso e divertido.
Agora a cereja no topo do bolo! Como gerar uma string como a do exemplo acima a partir dos arquivos num diretório?
Digamos que queremos remover todos os arquivos que começam com "foo".
Começamos digitando:
Digamos que queremos remover todos os arquivos que começam com "foo".
Começamos digitando:
rodolfo@lisa:/tmp/bash-tricks$ rm f
Agora tecle alt + { e você verá o Bash auto-completar usando a notação de {}:
rodolfo@lisa:/tmp/bash-tricks$ rm foo{-bar,.txt,_{ball.egg,spam{.egg,1.egg,2.egg,3.egg}},baz}
Fantástico não? Note que você pode apontar para outros diretórios, e fazer combinações arbitrariamente complexas.
Não sei em que parte da documentação isto está, descobri por acaso!
Quer aprender mais? man bash
6 comments:
E tem mais! Isso também funciona para um intervalo numérico (com ou sem os zeros à esquerda):
echo example{1..20}.txt
echo example{01..20}.txt
Puxa vida! Você não vai precisar ler o próximo post sobre Bash... é justamente sobre isso! (fica na mesma seção do man bash)
Resolvi guardar e não soltar tudo num post só e as coisas se perderem.
Obrigado pela visita e o comentário!
Olá Rodolfo.
Bash é realmente muito poderoso.
Não entendi esse seu exemplo quando você menciona Alt + {
O que era pra ter acontecido?
Só entendi mesmo da expansão com o diff e com o exemplo postado pelo Denilson. Poderia explicar melhor aquela parte, por favor?
Abraço!
Adicionei um pouco de texto explicando a última parte. Se não conseguir entender, pode perguntar aqui.
Uma sugestão é experimentar os exemplos num terminal e ver ao vivo o comportamento do Bash.
Obs: Para remover todos os arquivos começados com "foo" ainda é melhor usar rm foo*, mas o alt+{ permite ver o que está no input para o comando, e te dá a flexibilidade de editar antes de executar.
Dependendo do terminal usado, Alt+{ vai digitar um caractere acentuado, em vez de chamar o comando do bash.
Mas isso é facilmente resolvido. No linux (ou no terminal, ou no Unix... ah, sei lá onde mais!), Alt+tecla é equivalente a apertar Esc seguido da tecla.
Ou seja, enquanto aqui Alt+{ aparece "û", apertar Esc, e depois apertar { faz o efeito descrito no post.
Obrigado Rodolfo e Denilson.
Testei com Esc + { e funcionou perfeitamente.
Post a Comment