por que o find está listando recursivamente arquivos .log, embora o padrão de pesquisa não seja citado

0

O comando find que estou usando está listando recursivamente todos os arquivos .log, mesmo que o padrão correspondente não seja citado. Até onde eu sei, se o padrão de busca não for citado, ele será expandido pelo shell, então o comando find funcionará nele, o que deve fornecer os arquivos .log apenas no diretório atual.

find . -iname *.log

    
por Pankaj Pandey 17.12.2017 / 10:43

2 respostas

2

Provavelmente você está usando um desses shells como bash e a maioria dos outros POSIX shells que não reportam um erro quando globs não combinam com nenhum arquivo e passam o glob textual (unexpanded) para o aplicativo (e não há arquivos não ocultos com uma extensão .log no diretório atual).

Nestas conchas, você descobrirá que

echo *.log

saídas

*.log

em vez de um erro como:

zsh: no matches found: *.log'

fish: No matches for wildcard '*.log'. See 'help expand'.
echo *.log

echo: No match.

Então, se não houver nenhum arquivo .log no diretório atual:

find . -name *.log

Seria o mesmo que

find . -name '*.log'

onde um argumento litteral *.log é passado para find .

Os shells em que isso foi corrigido são zsh , csh , tcsh e versões recentes de fish (bem, na verdade, foi OK em versões anteriores do Unix, mas foi quebrado no shell Bourne em o final dos anos 70 e depois fixou novamente em algumas conchas). Com bash , você pode usar shopt -s failglob para obter o melhor comportamento.

Observe que, se houvesse um arquivo .log no diretório atual (como file.log , ele se tornaria:

find . -name file.log

E se houvesse mais de um (como file1.log e file2.log ), isso se tornaria:

find . -name file1.log file2.log

Qual seria uma invocação find inválida.

    
por 17.12.2017 / 11:23
-1

O que pode ser expandido pelo shell é o ponto inicial , no seu caso . , mas não o padrão de pesquisa.
Então funciona como projetado.

O comando da seguinte forma faria o shell expandir.

find *log 

Este comando em si não faz muito sentido, pois você também pode usar

ls -1 *log

Atualizar

Como você mencionou nos comentários abaixo, seu shell está cuidando de citar o padrão de pesquisa.
E você está certo de que o padrão de pesquisa será expandido pelo shell, mas isso normalmente resultará em um erro, que é descrito na página do manual de find na seção NON-BUGS .

    
por 17.12.2017 / 11:10