웹모아
웹모아[가입] 로그인 / 회원가입   검색     


  
자잘한팁
 

리눅스에서 파일 찾기
2007-06-11 13:38:18 댓글:(0)   조회:3262
 


이름으로 파일 찾기

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

이런 경우에 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.txt, Lotsfile.txt, lostfile.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 파일들을 살펴보라.

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


. 


[이전글]  find 명령어로 특정문자가 포함된 파일 찾기
[다음글]  특정 문자열을 포함하는 특정 파일들 찾는 쉘


 
댓글쓰기는 회원(로그인 하신분) 이상 가능합니다.


 댓글 (0)

  
자잘한팁
페이지: 1 / 8   

 리눅스 파일 검색 (find), 파일 내부 문자열 검색(grep 이용)
열람:85   2015.03.09


 리눅스에서 하드디스크 mount 하기
열람:2040   2014.01.14


   CentOS 하드 마운트
열람:3170   2014.01.14


 리눅스에서 캡쳐하는 방법
열람:3288   2012.04.23


 특정 디렉토리의 사용량을 알려면
열람:3234   2011.10.01


 시스템이 ping에 응답하지 못하게 설정하려면
열람:2753   2010.12.18


 리눅스에서 공백이 포함된 디렉토리 처리
열람:3142   2010.11.16


 cp 명령과 ln 명령의 차이점
열람:10101   2010.11.06


 리눅스 명령어 top
열람:2903   2010.11.06


 특정 디랙토리 인증걸기 htpasswd, htaccess
열람:3242   2009.03.03



[1]  [2]  [3]  [4]  [5]  

복수단어 검색은 공백(space)로 구분해 주세요.




 
최근 글 [손님]
 
인기 글 [손님]
[홈마스타] (1) oledb 접근 오류