posted by 구름너머 2005. 7. 20. 11:32
예를 들어 리눅스 안에 모든 txt파일 중에 그 내용에 hello가 포한 되있는 파일만 찾으려면 어떻게 하나요..??
질문자가 선택한 답변
re: 리눅스 명령어 find를 써서....
mkjunee (2005-03-10 16:09 작성)이의제기
질문자 평
find는 파일 내용까지는 볼 수가 없고, grep을 같이 써야 합니다.


$ find . -name *.txt -exec grep hello {} \;

이렇게 하면 hello가 들어있는 파일의 내용은 볼 수 있는데,
해당 파일의 이름은 나오지 않는 문제가 있지요.
그래서, 아래와 같은 shell script를 하나 짜서 실행시키세요.

!#/bin/csh

echo $1;
grep hello $1;


위 내용을 findhello.csh로 저장하시고, 물론, 실행가능하게 chmod a+x 해주구요.

$ find . -name *.txt -exec findhello.csh {} \;

하면 됩니다.
답변들
re: 리눅스 명령어 find를 써서....
neolunch (2005-03-10 18:13 작성)이의제기
윗분 말씀이 UNIX 계열에서 사용하던 정석적인 방법입니다.

그러나 find나 grep 등도 계속 버전업이 되고,

유용한 유틸들이 기본으로 포함되면서

몇가지 유용한 기능들을 쉽게 할 수 있게 되었습니다.

find . -name "*.txt" | xargs grep hello
or
find . -name "*.txt" | xargs grep -l hello

xargs라는 유틸을 사용하시면 스크립트를 작성하지 않아도 될듯합니다.

그리고 grep의 옵션을 이용하면 여러가지 효과를 얻을 수도 있습니다.

-l : 파일 리스트만 보여줍니다. 이 옵션을 주지 않으면,
특정 파일에 hello가 두번 나올 때, 그 두 라인을 모두 print해주지만
이 옵션을 넣으면 한번 나오든지 여러번 나오든지, hello를 포함하고
있는 파일 이름만 나열해 줍니다.
-i : ignore-case, 즉 Hello, HEllO등, 대소문자 구분하지 않고 찾아줍니다.

특히나 -r 옵션은 find를 쓰지 않고 특정 디렉토리 이하를 모두 검색해줍니다.

이러한 옵션은 님의 리눅스 박스에 인스톨 되어 있는 grep의 종류와 버전에

따라 다르므로, 반드시 man grep 하셔서 어떤 옵션이 있는지,

내가 필요로 하는 기능을 어떤 옵션이 지원하지는 않는지 대충 읽어 보시면

많은 도움이 되시리라 생각됩니다.

그러나 앞서도 밝혔듯이, 정석은 윗분의 말씀대로 하시는 것입니다.

참고하세요.

'UNIX' 카테고리의 다른 글

C shell, Bourne shell에서의 테스트 방식 비교  (0) 2005.10.17
UNIX에서 날짜 구하기 팁.  (0) 2005.08.25
UNIX 셀 프로그램에서 값 비교하기..  (0) 2005.04.07
wait(2)  (0) 2005.03.15
main() 함수의 매개변수-> (argc,argv)  (0) 2005.03.15