Como encontrar arquivos com um padrão específico no diretório pai e filho?

2

Como encontrar arquivos com um padrão específico no diretório pai e filho do meu diretório de trabalho atual usando um único comando?

Nome do arquivo - test.txt , o arquivo tem o padrão nslookup

Este arquivo está presente em 3 diretórios e eles são / home , / home / 1 e / home / 1/2

Atualmente, estou em / home / 1 . Eu tentei comandos abaixo:

find ../ -type f -name "test.txt"

Saída:

../test.txt
../home/1/test.txt
../home/1/2/test.txt

Consegui encontrar os arquivos, por isso experimentei o comando abaixo:

$ find ../ -type f -exec grep "nslookup" {} \;
nslookup
nslookup
nslookup

Isso não exibe os nomes dos arquivos.

Comando:

find . -type f -name "test.txt" | xargs grep "nslookup"

== > me dá arquivos nos diretórios pwd e child:

./1/test.txt:nslookup
./test.txt:nslookup

mas quando tento pesquisar no diretório pai conforme mostrado abaixo, os resultados são incorretos:

find ../ -type f -name "test.txt" | xargs grep "nslookup"

User@User-PC ~/test
$ uname -a
CYGWIN_NT-6.1 User-PC 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
    
por Ashwin B 22.07.2018 / 14:50

1 resposta

4

Seu comando

find ../ -type f -exec grep "nslookup" {} \;

está quase correto, além do fato de que grep por padrão não exibe o nome do arquivo quando é dado apenas um único arquivo para trabalhar.

Aqui estão duas maneiras de corrigir isso:

  1. Usando um grep que tem a opção não padrão (mas comum) -H para sempre exibir o nome do arquivo:

    find ../ -type f -exec grep -H 'nslookup' {} \;
    
  2. Atribuindo grep pelo menos dois nomes de arquivo:

    find ../ -type f -exec grep 'nslookup' /dev/null {} \;
    

Se você está interessado em somente os nomes dos arquivos, estas são duas maneiras de fazer isso:

  1. Use a opção padrão -l com grep :

    find ../ -type f -exec grep -l 'nslookup' {} \;
    
  2. Deixar find gerar o nome do caminho do arquivo, se ele contiver uma correspondência:

    find ../ -type f -exec grep -q 'nslookup' {} \; -print
    

    Aqui, usamos somente grep para detectar se o padrão corresponde. Sua opção -q impede que ela imprima nada e find usará o status de saída do utilitário para determinar se a ação -print deve ou não ser executada.

por 22.07.2018 / 15:51