Diferença entre find -name com e sem aspas?

3

Eu enviaria um bug para findutils no gnu.org quando vi um aviso que me perguntou se eu sabia a diferença entre esses dois comandos:

find -name *.c    

e

find -name "*.c"

Eu uso comando de encontrar com bastante freqüência, mas eu não acho que esses dois têm alguma diferença. Então estou curioso, estou errado ou é só mais um GNU que está brincando?

    
por fwonce 17.02.2011 / 17:49

2 respostas

11

No primeiro exemplo, seu shell expandirá primeiro o *.c para corresponder a todos os arquivos no diretório atual que terminam em .c .

Portanto, se você tiver one.c , zwei.c e tres.c em seu diretório, seu shell expandirá isso para

find . -name one.c zwei.c tres.c

e find provavelmente ficarão confusos porque você está passando alguns argumentos extras depois que -name one.c - zwei.c e tres.c não são considerados parte do que você está pesquisando com -name .

No segundo exemplo, você está passando a string literal *.c para a opção -name de find . Isso é algo que o find sabe como lidar - e provavelmente o que você está procurando.

Uma maneira alternativa de realizar a mesma coisa seria com uma fuga de barra invertida:

find . -name \*.c

(Observe também que seus exemplos precisam de um argumento para informar find onde iniciar a pesquisa. Isso geralmente é apenas . para indicar o diretório atual.)

    
por 17.02.2011 / 18:08
2

O primeiro só resultará em *.c se você não tiver arquivos que correspondam ao diretório atual, caso contrário, ele se expandirá para esses nomes de arquivos. Este último sempre resultará no texto *.c .

    
por 17.02.2011 / 17:52

Tags