출처 : 네이버 블로그 http://cafe.naver.com/7ever/58
파일 찾기
초록: 이 문서는 이름과 그 내용으로 어떻게 파일을 찾는지에 대한 개괄적인 내용을 알려준다.
이름으로 파일 찾기
아마도 이러한 문제를 경험해 보았을 것이다: 어떤 파일을 가지고 있었는데 어디에다 뒀는지 기억을 못하겠다.
이런 경우에 find 명령어를 이용하면 간단하게 된다. 어떻게 사용할까? find 는 커다란 man 페이지와 함께 설치되지만 "일반적인 경우"를 살펴보기로 하자. 현재 디렉토리로부터 시작해서 lostfile.txt 라는 파일을 디렉토리 트리를 따라서 찾아보려 한다면 아래와 같은 명령을 사용하면 된다.
find 는 또한 와일드카드 문자도 받아들인다. 쉘이 와일드카드 문자를 find로 넘기기 전에 확장하는 것을 막기 위해서 인용부호로 감싸는 것을 잊지 말아야 한다. 아래에 그러한 예가 있다.
커다란 디렉토리 트리에서 검색을 할 경우에는 위와 같은 명령들은 꽤 느릴 수 있다. locate 명령어를 사용하는 것도 도움을 준다. 이 명령어는 파일 시스템에서 직접 파일을 찾지는 않는다. 데이터베이스를 검색할 뿐이다. 이렇게 하면 훨씬 빠르긴 하지만 데이터베이스가 예전의 것일 수도 있다. 어떤 배포판들에서는 locate로 생성된 데이터베이스가 매일 밤 업데이트되지만, 데이터베이스를 업데이트하기 위해updatedb 명령어를 수시로 작동시켜도 된다. locate 는 substring도 검색한다.
이렇게 하면 lostfile.txt 나 mylostfile.txt 등등의 파일의 위치를 알려주게 될 것이다.
지금까지는 파일 이름이 무엇인지 꽤 정확하게 아는 것들만 찾아 보았다. 어쩌면 파일 이름이 lostfile.txt가 아니라 lastfile.txt 이나leastfile.txt 또는 lostfiles.txt, Lotsfile.txt, lostfile.text 일 수도 있고, 이름을 정확하게 기억하지 못할 수도 있다. 어떻게 하면 그런 경우에도 파일을 찾을 수 있을까? 이러한 경우에는 ftff 라는 오류에 관대한 파일 찾기 (fault tolerant file find) 유틸리티를 사용할 수도 있다. ftff 는 파일을 찾으면서 몇 몇 "스펠링 오류"를 허용한다. 이 명령어는 조금씩 잘못 적힌 파일 이름들을 모두 찾을 것이다.
허용되는 스펠링 에러의 개수는 파일의 이름의 길이에 의해 결정되지만 -t 옵션으로 설정할 수도 있다. 최대 2개의 오류를 허용하고 와일드카드 문자도 사용하고 싶다면 아래와 같이 입력하면 된다.
ftff 는 필자가 직접 만든 프로그램이며 whichman-1.4 라는 패키지의 일부이다. 이 패키지는 아래의 사이트에서 구할 수 있다.
sunsite.unc.edu/pub/Linux/apps/doctools/whichman-1.4.tar.gz어떤 경우에는 특정 문자열을 포함하지 않는 모든 파일을 찾고 싶은 경우도 있을 것이다. 예를 들면 .o 와 .c 를 제외한 파일을 찾고 싶을 것이다. 그렇게 할 수 있는 몇 몇 방법은 아래와 같다.
파일 시스템의 전체적인 모습 보기
어떤 경우에는 파일 시스템의 전체적인 모습을 보고 싶은 경우도 있을 것이다. 예를 들면 새로운 CD를 구했을 때 거기에 무엇이 들어 있는지 알고 싶은 경우와 같이 말이다. 그냥 ls -R 명령을 이용할 수도 있다. 개인적으로 필자는 가독성을 위해서 명령어를 선호한다. tree (sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz ) 프로그램은 트리 다이어그램을 그려준다.
물론 오래 되었지만 좋은 find 를 사용해도 된다. 보통 리눅스에 들어 있는 gnu 버전의 find 는 파일 사이즈를 파일 이름과 함께 출력하는 것 같이 출력 형태를 바꿀 수도 있다.
유사한 기능을 하는 ls 명령어의 perl wrapper 도 있다. 그것은 여기: lsperl.gz 에서 구할 수 있다. 아마 훨씬 더 많은 파일 보기 툴을 찾을 수도 있겠지만 대부분의 경우 이 정도면 충분하고도 남는다.
내용으로 파일 찾기 (파일 안의 텍스트 문자열 찾기)
파일 안의 텍스트 문자열을 찾는 표준적인 유틸리티는 정규표현식(regular expression)을 사용하는 경우에는 grep/egrep 이고 일반 문자열을 사용하는 경우에는 fgrep 이다. 현재 디렉토리에 있는 모든 파일에서 어떠한 표현을 찾을 때에는 아래와 같이 입력하면 된다.
하위 디렉토리의 모든 파일들에서 문자열을 찾는 경우에는 egrep 같은 것을 find 나 다른 검색 명령어와 함께 쓰면 된다. 여러 가지 방법으로 그렇게 할 수 있다.
만약에 기억하기가 힘들다면 here: grepfind.gz 에서 다운로드할 수 있는 간단한 쉘 스크립트를 사용해도 된다. 이 스크립트는 egrep 이 우연하게 바이너리 파일을 검사하게 되는 경우에 출력할 수 없는 문자를 제거하도록 하는 기능도 있다.
매우 흥미로운 검색 프로그램으로 agrep 이 있다. agrep 은 기본적으로 egrep 과 같이 동작하지만 오류에 관대한 검색(fault tolerant search)을 수행한다. 어떠한 표현을 찾으면서 최대 2개의 스펠링 오류를 허용하려면 아래와 같은 명령을 내리면 된다.
agrep 프로그램은 sunsite ftp://sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z 로부터 다운로드받거나 오리지날 사이트인ftp://ftp.cs.arizona.edu/agrep/ 로부터 다운로드받을 수도 있다.
그리고 glimpse 라는 프로그램도 있다. glimpse 는 매우 강력한 검색 유틸리티이다. 그것은 locate 와 유사한 개념을 사용한다. 우선 데이터베이스를 구축해야 하지만 검색은 매우 빠르다. 현재 디렉토리로부터 시작하는 모든 파일의 검색 인덱스를 만들려면 아래와 같이 입력하면 된다.
이후로는 이전에 인덱스에 수록된 모든 파일 안의 문자열을 검색할 수 있다.
glimpse 는 agrep 과 마찬가지로 오류에 관대하며 -2 는 두 개의 오류까지 허용한다는 뜻이다. glimpse는 http://glimpse.cs.arizona.edu/에서 구할 수 있다.
유닉스, 특히 리눅스에서는 매우 많은 검색 유틸리티를 사용할 수 있다. 이 문서는 물론 완벽할 수 없다. 만약에 이런 것과 비슷한 트릭과 유틸리티에 관심이 있다면 http://sunsite.unc.edu/pub/Linux/utils 아래에 있는 .lsm 파일들을 살펴보라.
즐겁고, 행복한 검색이 되시기를...
'공부하는 하스씨 > Linux' 카테고리의 다른 글
[SQL] 기본 문법들 (0) | 2009.03.05 |
---|---|
APM 설치하기. (0) | 2008.11.10 |
CVS 설정하기. (0) | 2008.11.10 |
vsFTP 설치하기 (0) | 2008.11.10 |
사용자별 쿼터 설정하기. (0) | 2008.11.10 |