O comando “find -name” deve ser colocado entre aspas ou não funciona. Por que é que?

3
find . -name *.rb

não funciona no meu Ubuntu

Eu tenho que fazer

find . -name "*.rb"

para que funcione.

Por que isso?

    
por npiv 13.03.2012 / 22:40

1 resposta

13

Se você tiver um arquivo no diretório atual que termina com .rb , ele será expandido pelo shell. Portanto, se você tiver um arquivo chamado "foo.rb", o comando executado será find . -name foo.rb . ("encontrar um arquivo chamado foo.rb")

Ele fica ainda pior se você tiver vários arquivos no diretório atual (digamos, "foo.rb" e "bar.rb"). Então o comando se torna find . -name foo.rb bar.rb , o que causará um erro de argumento para encontrar.

Para evitar que o shell expanere o padrão de glob *.rb , você deve citá-lo (aspas simples ou duplas servirão) ou sair do asterisco. Os comandos abaixo têm um comportamento equivalente:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
    
por Lekensteyn 13.03.2012 / 22:49