Depende do modo de edição do seu shell. Por exemplo, estou usando o modo vi e digite Esc
e *
e os curingas serão expandidos.
Suponha que eu queira digitar algo assim:
rm build/* tmp/*
Estou prestes a executá-lo, mas quero expandir os curingas antes de executá-los para poder verificar o que está prestes a acontecer. Como posso fazer isso?
Este é o fluxo de trabalho que estou procurando:
$ rm build/* tmp/* <press some magic key>
$ rm build/foo build/bar tmp/wiz tmp/buzz
(Editar) Outro exemplo de fluxo de trabalho:
$ # Check what is in directory:
$ ls -0
foo1
foo2
bar
$ # I want to delete foo1 and foo2, but want to do so carefully:
$ rm f*o <press some magic key>
$ rm foo1 foo2
Eu posso expandir outras coisas assim:
cd 'hg root' <Ctrl-x>
cd /users/bob/myMercurialRepository
(porque eu tenho Control-x shell-expand-line
no meu ~/.inputrc
).
Eu cavei o man bash
olhando as descrições de globbing, mas não consegui encontrar nada interessante.
Que tal
echo rm build/* tmp/*
Ou, na minha versão do bash
, clicando na aba guia imediatamente após o caractere curinga me fornecer uma lista de arquivos correspondentes.
Para "excluir arquivos com cuidado", recomendo usar o sinalizador de interação para rm
ou novamente prefixar com echo
echo rm -i f*o
rm -i f*o
Evidentemente, nenhum dos dois dará a você a lista preferida.
Na verdade, o comportamento é o seguinte (a partir de "Learning the bash Shell", de O'Reilly).
/
se for um diretório). Como exemplo (eu mesmo tentei), dado um diretório contendo os arquivos
aaabbb aaaccc aaaddd
...$ vi a
Esc \ produziria ...$ vi aaa•
e deixaria você no modo de inserção no •
. ...$ vi a
Esc * produziria ...$ vi aaabbb aaaccc aaaddd •
e deixaria você no modo de inserção no •
(até onde eu tentei, ele não adiciona /
se for um diretório). ...$ vi a
Esc = echo aaabbb aaaccc aaaddd
e retorna ...$ vi a
, deixando você no modo de comando. É claro que o *
na regex que você usou está implícito ; você poderia ter escrito
rm build/ tmp/
e depois pressionado Esc * em ambos (sim, até onde eu posso dizer e tente, Esc * expande todos os curingas somente na palavra delimitada por espaço em que o cursor está ).
Mas se você colocar um caractere curinga, o último não será mais implícito e você terá que fornecê-lo explicitamente. De fato, se houver um arquivo chamado aaazzzwww
, então, escrevendo a*w
, aaazzzw
, a*z*
, ou a*w*
e pressionando Esc \ para aaazzzwww
, mas a*z
não faria isso!
Tags command-line bash wildcards