Bem, se você usa o terminal mesmo que pouco deve saber que a tecla TAB é usada para auto-completar nomes de arquivos e alguns comandos.
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:
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!