Por que o find não está listando os arquivos correspondentes quando precedido por um asterisco (*)? [duplicado]

1

Em Ubuntu 14.04, 64 bit , defini /lib/modules/4.2.0-27-generic/kernel/drivers como meu diretório atual. Pretendo pesquisar todos os arquivos com net presentes como uma subcadeia. Se eu pesquisar com uma regex de *net* , apenas o diretório ./net será retornado como o resultado da pesquisa. No entanto, se eu especificar o nome exato do arquivo, apenas ele listará o arquivo relevante (Inútil, porque nem sempre eu sei o nome exato do arquivo a ser verificado).

$ find . -name *net* 
./net
$ find . -name *usbnet* 
./net/usb/usbnet.ko
$ pwd
/lib/modules/4.2.0-27-generic/kernel/drivers

Que erro estou fazendo?

    
por Holmes.Sherlock 29.06.2016 / 08:49

1 resposta

6

Porque quando você usa apenas *net* (sem citar ou escapar), ele será expandido pelo shell como o diretório (existente) net file / no diretório atual antes da execução do comando find . Então o comando se torna:

find . -name net

Como você pode ver, é apenas net , então usbnet.ko não será correspondido.

Observe também que, sem aspas e escape, se o padrão não corresponder (e as opções nullglob e failglob estiverem desabilitadas), será tratado como é . Portanto, por exemplo, para find . -name *net* , se nenhum nome de arquivo contiver net no diretório atual, o padrão find gets será *net* .

Então, para resolver o problema, você precisa evitar a globalização do shell, para fazer isso, você pode usar aspas ou escapar dos padrões glob:

find . -name '*net*' 
find . -name "*net*" 
find . -name \*net\* 
    
por 29.06.2016 / 09:08