숨겨진 파일을 grep하려면 어떻게해야합니까?


96

Git 저장소를 검색 중이며 .git폴더 를 포함하고 싶습니다 .

grep 실행하면이 폴더를 포함하지 않습니다.

grep -r search *

이 폴더를 포함하는 grep 명령은 무엇입니까?

답변:


136

수행중인 작업에 대한 더 나은 대안으로이 게시물 끝에있는 솔루션을 참조하십시오.

숨김 파일을 명시 적으로 포함 할 수 있습니다 (디렉토리도 파일 임).

grep -r search * .*

*숨겨진 파일을 제외한 모든 파일과 .*일치하며 숨겨진 파일 만 일치합니다. 그러나 주어진 디렉토리에 숨겨진 파일이 없거나 숨겨진 파일이 없으면 실패합니다. 당신은 물론 명시 적으로 추가 할 수 있습니다 .git대신 .*.

그러나 주어진 디렉토리에서 단순히 검색하려면 다음과 같이하십시오.

grep -r search .

.숨겨지지 않은 파일과 숨겨진 파일을 모두 포함하는 현재 경로와 일치합니다.


1
첫 번째 접근법 (grep -r search *. *)이 저에게 효과적이었습니다. 두 번째 방법 (grep -r search.)은 문자열을 찾지 못했습니다. "-r"을 생략하고 최상위 디렉토리 만 검색 할 때 비슷한 결과를 찾았습니다. GNU grep 2.6.3을 사용하고 있습니다.
Alan

@Alan : 이상합니다. 나는 이것을 정기적으로 사용합니다. 같은 디렉토리에서 시도 했습니까?
비트 마스크

27
사용하여 .*부모 디렉토리를 포함합니다 (때문에 ..일치)
sehe

1
bahavior는 셸마다 다를 수 있으므로이 솔루션을 일반화하는 것이 안전합니까?
astletron

6
첫 번째 버전의 경우 부모 폴더에서 검색하지 않도록 --exclude-dir = ..을 추가해야합니다.
user762353

12

방금이 문제가 발생했으며 @bitmask의 답변에 따라 @sehe가 지적한 문제를 피하기 위해 간단한 수정이 있습니다.

grep -r search_string * .[^.]*

나는 이것을 사용하여 어떤 결과도 얻지 못한다 : sudo grep -r ANDROID_HOME * .[^.]*내가 여기서 무엇을 잘못하고 있는가?
messerbill

@messerbill 어디에서 검색을 실행하고 있습니까?
insaner

3

아마도 다음과 같은 완전한 솔루션을 위해 "grep"과 "find"명령을 결합하는 것을 선호 할 것입니다.

find . -exec grep -Hn search {} \;

이 명령은 숨겨진 파일 또는 디렉토리에서 문자열 "search"를 검색하고 다음 출력 형식과 일치하는 모든 파일을 나열합니다.

파일 경로 : 줄 번호 : 일치하는 줄

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

2

현재 디렉터리를 검색한다고 가정하고이 방법을 사용할 수 있습니다 (그렇지 않으면.를 원하는 디렉터리로 대체).

find . -type f | xargs grep search

또는 최상위 수준에서 검색하려는 경우 (이를 시도하는 경우 테스트하는 것이 더 빠릅니다) :

find . -type f -maxdepth 1 | xargs grep search

업데이트 : Scott의 의견에 따라 예제를 수정했습니다. 나는 또한 "-type f"를 추가했습니다.


1
(1)  ~은 사용자의 홈 디렉토리입니다. 질문은 사용자의 홈 디렉토리에 관한 것이 아니므로 답변에를 언급해서는 안됩니다  ~. (2)  find명령에서 -name '*'무 작전입니다 (즉, 목적이 없습니다).
Scott 19

1

현재 위치에서 모든 숨겨진 파일 및 디렉토리 내에서만 검색하려면 :

find . -name ".*" -exec grep -rs search {} \;

모든 숨겨진 파일 만 :

find . -name ".*" -type f -exec grep -s search {} \;

모든 숨겨진 디렉토리 만 :

find . -name ".*" -type d -exec grep -rs search {} \;

1

다른 모든 답변이 더 좋습니다. 이것은 기억하기 쉬울 것입니다.

find . -type f | xargs grep search

파일 (숨김 포함) 만 찾고 각 파일을 greps합니다.


0

특정 폴더 내에서만 찾으려면 다음을 사용할 수 있습니다.

ls -al | grep " \."

grep을 나열하고 파이프하는 매우 간단한 명령입니다.


0

Tyler의 제안 외에도 숨겨진 파일을 포함하여 모든 파일과 폴더를 재귀 적으로 grep하는 명령이 있습니다.

find . -name "*.*" -exec grep -li 'search' {} \;

0

매칭 방지하기 위해 ...파일을 숨겨지지 않습니다, 당신은 사용할 수 grep와 함께 ls -A이 예에서는 같은 :

ls -A | grep "^\."

^\. 첫 번째 문자는 .

-A또는 --almost-all옵션 제외 결과를 .하고 ..그렇게 만 숨김 파일 및 디렉토리가 일치됩니다.


0

숨겨진 디렉토리 파일과 같이 특정 유형의 숨겨진 파일을 검색 할 수도 있습니다.

grep -r --include=*.directory "search-string"

이것은 다른 옵션 중 일부보다 더 잘 작동 할 수 있습니다. 작동했던 다른 옵션은 너무 느릴 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.