Linux에서 grep을 사용하여 파일 이름 만 표시하려면 어떻게해야합니까?


1068

어떻게 사용할 수있는 grep단지 파일 이름 (아무 인라인 경기) 리눅스를 보여?

나는 보통 다음과 같은 것을 사용하고 있습니다 :

find . -iname "*php" -exec grep -H myString {} \;

파일 이름 (경로 포함)을 얻을 수 있지만 일치하지 않는 방법은 무엇입니까? 사용해야 xargs합니까? grep맨 페이지 에서이 작업을 수행 할 방법을 찾지 못했습니다 .


3
적어도 하나 이상의 일치하는 파일 이름을 원하십니까?
leonbloy

4
좋은 질문입니다. 나는 실제로 이것을 사용하여 Vim에서 grep에 의해 반환 된 파일 목록을 열었습니다. vim $(grep -rl Something app/)
David Tuite

1
grep 명령을 사용하여 파일을 나열 할 수 없으며 기본적으로 파일 또는 목록에서 원하는 텍스트를 가져 오는 데 사용됩니다. 예를 들어 ps aux | grep 'apt-get'또는 grep 'text-to-find'/ path / to / file /
iamjayp

답변:


1625

표준 옵션 grep -l(소문자 L)이이를 수행 할 수 있습니다.

로부터 유닉스 표준 :

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

-H이 경우 에도 필요하지 않습니다 .


37
이 옵션에 대한 문서는 (대부분의 man 파일 에서처럼) 매우 불분명합니다! Pfff… 어떻게 사람이 엉덩이를 아프게하는지 놀랍습니다.
MonsieurDart

1
-H는 또한 경기 자체를 보여줍니다. 문제는 파일 이름 만이었습니다.
Hauke

@ Hauke ​​그리고 내 대답은 -l입니다. 질문에 사용자 명령에 -H가 포함되어 있고 -l이 주어지면 중복되므로 -H에 대해서만 언급했습니다.
Random832

2
좋아, 나는 개인적 grep -nrl "some text" .으로 하위 폴더에서 재귀 적으로 텍스트를 찾을 때 다른 플래그와 함께 이것을 사용하는 것을 좋아한다
openwonk

142

로부터 grep(1)매뉴얼 페이지

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

4
첫 경기에서 멈추고 자연이 필요합니다.
톰슨

7
문서는 약간 불분명합니다. "첫 번째 일치시 스캔이 중지됩니다"-모든 파일 이름이 인쇄됨을 나타내지 만 일치하는 단어에 대한 스캔은 처음에 중지됩니다.
TheMonkWhoSoldHisCode

2
@VishalP : 어커런스가 어디에 있는지 상관하지 않고 어커런스 만 존재하므로 첫 번째 어커런스 이후 각 파일을 검색 할 필요가 없습니다.
이그나시오 바스케스-아 브람스

17
@ IgnacioVazquez-Abrams 정확합니다. 문서의 첫인상은 첫 번째 파일의 파일 이름 만 인쇄한다고 느끼게합니다. 그것을 이해하려면 실제로 몇 가지 읽기가 필요합니다.
TheMonkWhoSoldHisCode 12

5
'현재 파일의 스캔이 첫 번째 일치에서 중지됩니다.' 훨씬 더 명확합니다.
sorrymissjackson

37

간단한 파일 검색을 위해 grep -l-r옵션을 사용할 수 있습니다.

grep -rl "mystring"

모든 검색은 grep에 의해 수행됩니다. 물론 다른 매개 변수에서 파일을 선택 해야하는 경우 올바른 해결책을 찾으십시오.

find . -iname "*.php" -execdir grep -l "mystring" {} +

execdir옵션은 각 디렉토리마다 각 grep 명령을 작성하고 파일 이름을 하나의 명령 ( +)으로 연결합니다.


0

귀하의 질문 파일 이름 (경로 포함)을 얻는 방법

구문 예제는 find입니다. -iname "* php"-exec grep -H myString {} \;

내 명령 제안

sudo find /home -name *.php

Linux OS에서이 명령의 출력 :

compose-sample-3 / html / mail / contact_me.php

경로가 포함 된 파일 이름이 필요하므로 즐기십시오!


질문은 특히 grep을 사용하여 파일 이름을 얻는 방법을 묻습니다 .
snakecharmerb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.