본문 바로가기
공부하는 하스씨/Linux

리눅스에서 파일찾기 명령 정리.

by 박하스. 2012. 8. 30.
728x90
반응형

출처 : 네이버 블로그 http://cafe.naver.com/7ever/58


파일 찾기

초록이 문서는 이름과 그 내용으로 어떻게 파일을 찾는지에 대한 개괄적인 내용을 알려준다.


이름으로 파일 찾기

아마도 이러한 문제를 경험해 보았을 것이다: 어떤 파일을 가지고 있었는데 어디에다 뒀는지 기억을 못하겠다.

이런 경우에 find 명령어를 이용하면 간단하게 된다. 어떻게 사용할까? find 는 커다란 man 페이지와 함께 설치되지만 "일반적인 경우"를 살펴보기로 하자. 현재 디렉토리로부터 시작해서 lostfile.txt 라는 파일을 디렉토리 트리를 따라서 찾아보려 한다면 아래와 같은 명령을 사용하면 된다.

find . -name lostfile.txt -print

find 는 또한 와일드카드 문자도 받아들인다. 쉘이 와일드카드 문자를 find로 넘기기 전에 확장하는 것을 막기 위해서 인용부호로 감싸는 것을 잊지 말아야 한다. 아래에 그러한 예가 있다.

find . -name "lost*" -print

커다란 디렉토리 트리에서 검색을 할 경우에는 위와 같은 명령들은 꽤 느릴 수 있다. locate 명령어를 사용하는 것도 도움을 준다. 이 명령어는 파일 시스템에서 직접 파일을 찾지는 않는다. 데이터베이스를 검색할 뿐이다. 이렇게 하면 훨씬 빠르긴 하지만 데이터베이스가 예전의 것일 수도 있다. 어떤 배포판들에서는 locate로 생성된 데이터베이스가 매일 밤 업데이트되지만, 데이터베이스를 업데이트하기 위해updatedb 명령어를 수시로 작동시켜도 된다. locate 는 substring도 검색한다.

locate lostfile

이렇게 하면 lostfile.txt 나 mylostfile.txt 등등의 파일의 위치를 알려주게 될 것이다.

지금까지는 파일 이름이 무엇인지 꽤 정확하게 아는 것들만 찾아 보았다. 어쩌면 파일 이름이 lostfile.txt가 아니라 lastfile.txt 이나leastfile.txt 또는 lostfiles.txtLotsfile.txtlostfile.text 일 수도 있고, 이름을 정확하게 기억하지 못할 수도 있다. 어떻게 하면 그런 경우에도 파일을 찾을 수 있을까? 이러한 경우에는 ftff 라는 오류에 관대한 파일 찾기 (fault tolerant file find) 유틸리티를 사용할 수도 있다. ftff 는 파일을 찾으면서 몇 몇 "스펠링 오류"를 허용한다. 이 명령어는 조금씩 잘못 적힌 파일 이름들을 모두 찾을 것이다.

ftff lostfiles.txt

허용되는 스펠링 에러의 개수는 파일의 이름의 길이에 의해 결정되지만 -t 옵션으로 설정할 수도 있다. 최대 2개의 오류를 허용하고 와일드카드 문자도 사용하고 싶다면 아래와 같이 입력하면 된다.

ftff -t2 "lostfiles*"

ftff 는 필자가 직접 만든 프로그램이며 whichman-1.4 라는 패키지의 일부이다. 이 패키지는 아래의 사이트에서 구할 수 있다.

sunsite.unc.edu/pub/Linux/apps/doctools/whichman-1.4.tar.gz

어떤 경우에는 특정 문자열을 포함하지 않는 모든 파일을 찾고 싶은 경우도 있을 것이다. 예를 들면 .o 와 .c 를 제외한 파일을 찾고 싶을 것이다. 그렇게 할 수 있는 몇 몇 방법은 아래와 같다.

find . ! -name "*.o" ! -name "*.c" -print
find . -print | fgrep -v '.o' | fgrep -v '.c'
find의 gnu 버전이 있다면:find | fgrep -v '.o' | fgrep -v '.c'
find | egrep -v '\.[oc]'

파일 시스템의 전체적인 모습 보기

어떤 경우에는 파일 시스템의 전체적인 모습을 보고 싶은 경우도 있을 것이다. 예를 들면 새로운 CD를 구했을 때 거기에 무엇이 들어 있는지 알고 싶은 경우와 같이 말이다. 그냥 ls -R 명령을 이용할 수도 있다. 개인적으로 필자는 가독성을 위해서 명령어를 선호한다. tree (sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz ) 프로그램은 트리 다이어그램을 그려준다.

tree
또는 파일 이름도 보려면:tree -fF

물론 오래 되었지만 좋은 find 를 사용해도 된다. 보통 리눅스에 들어 있는 gnu 버전의 find 는 파일 사이즈를 파일 이름과 함께 출력하는 것 같이 출력 형태를 바꿀 수도 있다.

find . -ls
find . -print또는 gnu find 로는:find
find . -printf "%7s %p\n"

유사한 기능을 하는 ls 명령어의 perl wrapper 도 있다. 그것은 여기: lsperl.gz 에서 구할 수 있다. 아마 훨씬 더 많은 파일 보기 툴을 찾을 수도 있겠지만 대부분의 경우 이 정도면 충분하고도 남는다.

내용으로 파일 찾기 (파일 안의 텍스트 문자열 찾기)

파일 안의 텍스트 문자열을 찾는 표준적인 유틸리티는 정규표현식(regular expression)을 사용하는 경우에는 grep/egrep 이고 일반 문자열을 사용하는 경우에는 fgrep 이다. 현재 디렉토리에 있는 모든 파일에서 어떠한 표현을 찾을 때에는 아래와 같이 입력하면 된다.

egrep -i "search expression" *

하위 디렉토리의 모든 파일들에서 문자열을 찾는 경우에는 egrep 같은 것을 find 나 다른 검색 명령어와 함께 쓰면 된다. 여러 가지 방법으로 그렇게 할 수 있다.

egrep -i "expression" `find . -type f -print`
find . -type f -exec egrep -i "expression" /dev/null {} \;
find . -type f -print | xargs egrep -i "expression"

만약에 기억하기가 힘들다면 here: grepfind.gz 에서 다운로드할 수 있는 간단한 쉘 스크립트를 사용해도 된다. 이 스크립트는 egrep 이 우연하게 바이너리 파일을 검사하게 되는 경우에 출력할 수 없는 문자를 제거하도록 하는 기능도 있다.

매우 흥미로운 검색 프로그램으로 agrep 이 있다. agrep 은 기본적으로 egrep 과 같이 동작하지만 오류에 관대한 검색(fault tolerant search)을 수행한다. 어떠한 표현을 찾으면서 최대 2개의 스펠링 오류를 허용하려면 아래와 같은 명령을 내리면 된다.

agrep -i -2 "search exprission" *

agrep 프로그램은 sunsite ftp://sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z 로부터 다운로드받거나 오리지날 사이트인ftp://ftp.cs.arizona.edu/agrep/ 로부터 다운로드받을 수도 있다.

그리고 glimpse 라는 프로그램도 있다. glimpse 는 매우 강력한 검색 유틸리티이다. 그것은 locate 와 유사한 개념을 사용한다. 우선 데이터베이스를 구축해야 하지만 검색은 매우 빠르다. 현재 디렉토리로부터 시작하는 모든 파일의 검색 인덱스를 만들려면 아래와 같이 입력하면 된다.

glimpseindex .

이후로는 이전에 인덱스에 수록된 모든 파일 안의 문자열을 검색할 수 있다.

glimpse -i -2 "search exprission"

glimpse 는 agrep 과 마찬가지로 오류에 관대하며 -2 는 두 개의 오류까지 허용한다는 뜻이다. glimpse는 http://glimpse.cs.arizona.edu/에서 구할 수 있다.


유닉스, 특히 리눅스에서는 매우 많은 검색 유틸리티를 사용할 수 있다. 이 문서는 물론 완벽할 수 없다. 만약에 이런 것과 비슷한 트릭과 유틸리티에 관심이 있다면 http://sunsite.unc.edu/pub/Linux/utils 아래에 있는 .lsm 파일들을 살펴보라.

즐겁고, 행복한 검색이 되시기를...

728x90
반응형

'공부하는 하스씨 > 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