웹모아 
웹모아  로그인  회원가입   
웹모아
 
자잘한팁
 


  리눅스에서 파일 찾기
  등록: 2007-06-11 13:38:18 조회:2431



이름으로 파일 찾기

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

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

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





 댓글 (0)


자잘한팁
페이지: 1 / 3   


   리눅스에서 하드디스크 mount 하기1324
     CentOS 하드 마운트1427
   리눅스에서 캡쳐하는 방법2499
   특정 디렉토리의 사용량을 알려면2621
   시스템이 ping에 응답하지 못하게 설정하려면2144
   리눅스에서 공백이 포함된 디렉토리 처리2442
   cp 명령과 ln 명령의 차이점5562
   리눅스 명령어 top2224
   특정 디랙토리 인증걸기 htpasswd, htacc2514
   IP 주소 접속을 도메인 주소로 바꾸기2566
   apache 에서 '사이트 공사중' 2769
   한개의 호스팅으로 여러개 홈피 운영하기2131
    리눅스 실시간 트래픽 모니터링 하기2687
   리눅스에서 날짜를 기준으로 파일삭제9131
   윈도우에서 unload 받은 오브젝트를 리눅스에서 2234
   유닉스 및 리눅스 명령어 팁2842
   리눅스 부팅후 자동 실행2408
   리눅스 소유권바꿀때 인수 명단이 너무 김..에대해서3143
   find 명령어로 특정문자가 포함된 파일 찾기(홈마스타)(1) 2781
리눅스에서 파일 찾기(홈마스타)2432
   특정 문자열을 포함하는 특정 파일들 찾는 쉘(홈마스타)2419
   인터넷 이용시 만나는 에러메시지의 의미(홈마스타)2515
   하이퍼텍스트 전송규약 1.1표준(안)(홈마스타)3957
   웹 로그 분석 기본 개념의 이해 (70) : 웹 로(홈마스타)2628
   mod_url(홈마스타)2849
   다른 서버, 다른 도메인간 세션 공유 방법 1차 개(홈마스타)3211
     [RE] 다른 서버, 다른 도메인간 세션 공유 방법(홈마스타)2948
   다른서버 세션공유(홈마스타)2903
   이미지 링크 못하게 하기(홈마스타)2301
   아파치 가상 유저 호스트 설정하기[modr_rewr(홈마스타)1423
≪ [1]  [2]  [3]   ≫

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




공지사항
 
인기 글
9965
9131
20289
4903
6743
5562
3812
6753
[홈마스타] [RE] input type=\\
6615
3991
19182
4535
10349
6292
4438
 
최근 글
167
279
189
168
115
146
2945
772
766
949
826
4038
3375
3425
3812