Questão find -exec grep resultado 'string' diferente do resultado do comando grep -r


Por que este comando

find /etc -exec grep student {} \; 2>/dev/null

mostre-me mais resultados do que este comando

grep -r student /etc 2>/dev/null

terminal window


0


origem


Adicionar -H ao grep comando no find run string: mostrará os nomes dos arquivos e, assim, terá uma ideia melhor do que está acontecendo, se mais arquivos são encontrados ou mais correspondências em cada arquivo. Parece que o find comando é encontrar um dicionário, não encontrado por grep -r. - AFH
Obrigado AFH pela explicação -H definitivamente o usará no futuro. Obrigado Kamil, -R em vez de -r resolveu o problema. Não, meu grep não era um pseudônimo. - Tomas.R


Respostas:


Provavelmente existem alguns links simbólicos sob sua /etc. Parece que o seu grep -r não os segue, mas find faz.

Experimentar grep -R.

Nota: nenhum -r nem -R é exigido pelo POSIX. Algumas implementações de grep pode não apoiá-los; alguns podem apoiar um deles, não necessariamente seguindo (ou não) links simbólicos como neste exemplo; alguns podem tratar -R e -r igualmente. Referir-se man 1 grep no seu sistema operacional para ter certeza.


0



Fiquei perplexo porque find com seu padrão -P estava retornando links, mas agora percebo que isso é precisamente o que faz: ele retorna um link, mas isso é passado para grep, que segue o link ao ler o arquivo, enquanto grep -r ignora links, seja para arquivos ou diretórios. Ambos os comandos retornarão os mesmos resultados da pesquisa se -type f é adicionado ao find executar string. Isso pode ser óbvio, mas levei algum tempo para entender, então achei que valeria a pena notar. Além disso, observe que, se houver links de diretórios, grep -R irá verificar mais arquivos do que o find comando a menos -L Está adicionado. - AFH