폴더 내에 있는 파일들에서 특정한 키워드를 찾는 것을 생각보다 많이 하게 됩니다. 예를 들자면 프로젝트의 구조를 빠르게 파악하고자 할 때 저는 생각보다 많이 이용했는데요. 실습을 한 번 해 보겠습니다.

 


 현재 find_test의 구조는 위와 같습니다. find_test 아래에는 디렉토리 1, 2가 있습니다. 디렉토리 1 밑에는 1.txt, 2.txt가 있고, 2 밑에는 3.txt, 4.txt가 있습니다. 다음에 find_test에는 디렉토리 1, 2 말고도 5.txt와 6.txt가 있습니다.

 

 

 저는 특정 키워드를 찾을 때, r 옵션과 n 옵션을 저는 주로 씁니다. 이것은 탐색을 시작하는 디렉토리로부터 재귀적으로 탐색합니다. 보시면, 5.txt와 6.txt 뿐만이 아니라, 디렉토리 1과 2 밑에 있는 1.txt, 2.txt, 3.txt, 4.txt 등도 같이 탐색했음을 알 수 있습니다. 스크린 샷에서 .는 현재 제 상대 위치로부터 탐색을 시작하는 것인데요. 저는 홈 디렉토리의 find_test에 있었으므로 이 위치가 기준 위치임을 알 수 있습니다.

 

 "" 부분은 patterns을 의미하는데요.

 

 

 pattern에 ""를 쳤으므로, 모든 줄이 매치가 됩니다. 이 중 maple이 있는 패턴을 찾고 싶으면 아래와 같이 입력하면 됩니다.

 

 

 그러면, maple이라는 것이 있는 줄만 찾게 됩니다. 사실 여기까지만 알아도 프로젝트 내에 있는 모든 파일들에 대해서 특정 키워드가 있는 위치를 찾는 데에는 별 문제가 되지 않습니다.

 


 그런데, 특정한 glob 패턴을 만족시키는 파일만 결과에 나타나게 하거나, 특정한 glob 패턴을 만족시키는 파일은 결과에서 제외해야 하는 경우가 있습니다. 예를 들자면, 패키지 a 안에 있는 것만 검색하거나, 패키지 b 안에 있는 것은 제외하고 싶은 경우가 있습니다. 혹은 특정 확장자에 대해서만 검색해야 하는 경우도 있습니다.

 

 

 먼저 --include 옵션을 쓰면, 패턴에 만족하는 파일명을 가지는 파일만 검색합니다. *.txt는 txt 확장자를 가진 파일만 검색한다는 의미입니다. 보니까 정말 이 친구만 검색했음을 알 수 있어요.

 

 

 man 페이지에 나와 있는 부분이기도 합니다. 그런데, 우리는 특정한 조건을 만족하는 파일은 검색에서 제외할 필요가 있어요. 이 경우, --exclude 옵션을 쓰게 됩니다.

 

 

 제 ubuntu에서 grep man 페이지를 보니, --exclude랑 --exclude-dir 옵션이 있습니다. 탐색을 시작하는 위치로부터 1번 디렉토리만 제외해 보겠습니다.

 

 

 그럴려면 --exclude-dir=1을 입력하면 됩니다. 그러면 1 밑에 있는 1.txt와 2.txt는 제외됨을 볼 수 있어요.

 

 

 디렉토리 1과 2 둘 다 검색 대상에서 제외하려면 --exclude-dir={1,2} 이래 입력하시면 됩니다. glob 패턴에 대한 설명은 사이트에 매우 많으니 보셔도 좋겠습니다. 아마도 깃을 많이 해 보셨으면 익숙하실지도 모르겠지만요.

 


 이제, 7.c와 8.p를 추가합시다.

 

 추가한 후의 디렉토리 구조는 위와 같습니다.

 

 

 그리고 7.c와 8.p에 들어있는 내용은 위와 같은데요.

 

 

  --include=\*.{txt,c}를 입력해 봅시다. 이것의 의미는 .txt로 끝나거나 .c로 끝나는 파일에 대해서 패턴이 먹힌다는 의미입니다. 실제로 결과를 봐도 확장자가 .c인 것과 .txt인 것만 결과에 포함됨을 알 수 있어요. 사실 이 정도만 아셔도, 프로젝트 폴더 내에서 특정 키워드를 찾는 작업은 크게 어렵지 않을 듯 싶네요.