상위 및 하위 디렉터리에서 특정 패턴을 가진 파일을 찾는 방법은 무엇입니까?

상위 및 하위 디렉터리에서 특정 패턴을 가진 파일을 찾는 방법은 무엇입니까?

단일 명령을 사용하여 현재 작업 디렉터리의 상위 디렉터리와 하위 디렉터리에서 특정 패턴을 가진 파일을 찾는 방법은 무엇입니까?

파일 이름 -테스트.txt, 파일에 다음 패턴이 있습니다.nslookup

이 파일은 3개의 디렉터리에 있습니다./집,/홈페이지1그리고/홈/1/2

나는 현재/홈페이지1. 다음 명령을 시도했습니다.

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

산출:

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

파일을 찾을 수 있었으므로 다음 명령을 시도했습니다.

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

파일 이름은 표시되지 않습니다.

주문하다:

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

==> pwd와 하위 디렉터리의 파일을 알려주세요.

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

하지만 아래와 같이 상위 디렉터리에서 검색하려고 하면 결과가 잘못되었습니다.

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

답변1

주문

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

grep단일 파일만 사용할 수 있는 경우 기본적으로 파일 이름이 표시되지 않는다는 점을 제외하면 거의 정확합니다.

이 문제를 해결하는 두 가지 방법은 다음과 같습니다.

  1. 항상 파일 이름을 표시하려면 grep비표준(그러나 일반적인) 옵션과 함께 a를 사용하십시오 .-H

    find ../ -type f -exec grep -H 'nslookup' {} \;
    
  2. grep파일 이름을 두 개 이상 지정하세요.

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

당신이 관심이 있다면오직파일 이름을 입력한 경우 이를 수행하는 방법에는 두 가지가 있습니다.

  1. -l표준 옵션 사용 grep:

    find ../ -type f -exec grep -l 'nslookup' {} \;
    
  2. 파일에 일치하는 항목이 있으면 find파일의 경로 이름을 출력합니다.

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

    grep여기서는 패턴이 일치하는지 감지하는 데 에만 사용합니다 . 해당 -q옵션은 아무것도 출력하지 못하게 하며 find유틸리티의 종료 상태는 작업 수행 여부를 결정하는 데 사용됩니다 -print.

관련 정보