Como 'encontrar. -name * foo * 'trabalho?

8

Eu achei que o caractere curinga * no comando find . -name *foo* foi substituído por bash e, no entanto, o comando funciona, a menos que *foo* corresponda a algo no diretório atual e, em seguida, não. É confuso.

    
por chx 29.07.2011 / 20:11

2 respostas

14

Se o bash não puder encontrar uma correspondência, ele passará a string literal para o aplicativo com * s unexpanded. Por exemplo:

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bash expandido *foo* porque correspondeu, mas transmitiu *bar* diretamente porque isso não aconteceu. A opção nullglob dirá ao bash para resolver padrões não correspondentes para a string vazia:

$ shopt -s nullglob
$ /tmp/test *bar*

$
    
por 29.07.2011 / 20:30
5

Se você quiser que find obtenha a sequência não expandida, poderá citar ou proteger os curingas com barras invertidas.

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test '*foo*'
*foo*

$ /tmp/test \*foo\*
*foo*
    
por 30.07.2011 / 16:36

Tags