Git 저장소를 검색 중이며 .git
폴더 를 포함하고 싶습니다 .
grep
실행하면이 폴더를 포함하지 않습니다.
grep -r search *
이 폴더를 포함하는 grep 명령은 무엇입니까?
답변:
수행중인 작업에 대한 더 나은 대안으로이 게시물 끝에있는 솔루션을 참조하십시오.
숨김 파일을 명시 적으로 포함 할 수 있습니다 (디렉토리도 파일 임).
grep -r search * .*
은 *
숨겨진 파일을 제외한 모든 파일과 .*
일치하며 숨겨진 파일 만 일치합니다. 그러나 주어진 디렉토리에 숨겨진 파일이 없거나 숨겨진 파일이 없으면 실패합니다. 당신은 물론 명시 적으로 추가 할 수 있습니다 .git
대신 .*
.
그러나 주어진 디렉토리에서 단순히 검색하려면 다음과 같이하십시오.
grep -r search .
은 .
숨겨지지 않은 파일과 숨겨진 파일을 모두 포함하는 현재 경로와 일치합니다.
.*
부모 디렉토리를 포함합니다 (때문에 ..
일치)
방금이 문제가 발생했으며 @bitmask의 답변에 따라 @sehe가 지적한 문제를 피하기 위해 간단한 수정이 있습니다.
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
내가 여기서 무엇을 잘못하고 있는가?
아마도 다음과 같은 완전한 솔루션을 위해 "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
현재 디렉터리를 검색한다고 가정하고이 방법을 사용할 수 있습니다 (그렇지 않으면.를 원하는 디렉터리로 대체).
find . -type f | xargs grep search
또는 최상위 수준에서 검색하려는 경우 (이를 시도하는 경우 테스트하는 것이 더 빠릅니다) :
find . -type f -maxdepth 1 | xargs grep search
업데이트 : Scott의 의견에 따라 예제를 수정했습니다. 나는 또한 "-type f"를 추가했습니다.
~
은 사용자의 홈 디렉토리입니다. 질문은 사용자의 홈 디렉토리에 관한 것이 아니므로 답변에를 언급해서는 안됩니다 ~
. (2) find
명령에서 -name '*'
무 작전입니다 (즉, 목적이 없습니다).
Tyler의 제안 외에도 숨겨진 파일을 포함하여 모든 파일과 폴더를 재귀 적으로 grep하는 명령이 있습니다.
find . -name "*.*" -exec grep -li 'search' {} \;
숨겨진 디렉토리 파일과 같이 특정 유형의 숨겨진 파일을 검색 할 수도 있습니다.
grep -r --include=*.directory "search-string"
이것은 다른 옵션 중 일부보다 더 잘 작동 할 수 있습니다. 작동했던 다른 옵션은 너무 느릴 수 있습니다.