[맥 터미널 / Unix] locate 커맨드로 초간단 파일 찾기

맥의 터미널(Unix) 환경에서 ‘locate’ 커맨드로 파일을 찾는 방법입니다. 터미널 커맨드라 따분하다는 생각보다는 맥에서 파일을 검색하는 또 하나의 방법이라고 생각해주시고 글을 읽어주셨으면 좋겠습니다.

* GUI 환경에서 작업하실 때는 메타데이터 기반의 검색 툴인 ‘스팟라이트’나 ‘알프레드’ 등 강력한 검색 도구임에는 틀림이 없습니다. mds, mdworker 프로세스를 통해 저장 공간 내의 파일의 메타데이터 정보를 미리 스캔해두고 빠른 검색 기능을 제공하는 것이 이들의 원리죠.

locate의 특징 ▼

  • 미리 빌트(Pre-Built)되어 있는 데이터베이스에 접근해서 매우 빠른 시간 내에 원하는 결과물을 검색합니다.
  • 검색 속도가 빠른 대신 데이터베이스의 주기적인 업데이트가 필요합니다. 업데이트가 진행되지 않았다면 원하는 파일이 올바르게 색인되지 않을 수 있습니다.
  • Root(/)를 시작 포인트로 find 커맨드와 비교해보시면 성능 차이를 확연히 확인하실 수 있습니다.
$ find / -name example.txt
$ locate example.txt

locate 커맨드로 파일 찾는 방법

터미널 앱을 실행해주시고 아래 내용을 진행하시면 됩니다. 커맨드 앞에 표시된 ‘$’ 기호는 입력하는 기호가 아닙니다.

 

1) 올바른 검색 결과를 얻기 위해서 검색 데이터베이스를 먼저 생성하셔야 합니다.

데이터베이스 업데이트 ▼

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

* 과거 locate 프로그램을 한번도 실행한 적 없는 사용자들은 locate 커맨드 실행으로 ‘DB를 업데이트하라’는 경고 메시지를 받게 됩니다.

$ locate [검색어]
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command: 
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

 

2) 데이터베이스가 업데이트 완료될 때까지 기다립니다. ▼

데이터베이스를 업데이트는 ‘find’ 프로세스로 파일 구조를 수집(Gathering)합니다. 커맨드 실행 시 아무 메시지도 나타나지 않기 때문에 활성 상태 보기(Activity Monitor) 등으로 이동하셔서 확인하셔야 합니다. 이 작업은 짧게는 2분 길게는 10분 정도 걸립니다.

 

3) 데이터베이스 업데이트가 완료되고 검색어를 입력하여 검색합니다. 1초도 걸리지 않아 위치를 반환해주는 것을 확인하실 수 있습니다.

기본 문법 ▼

locate [검색어]

예시

~/Test (745) $locate example3.txt
/Users/Travelholics/Test/example3.txt

Wildcards도 동작합니다. ▼

~/Test (746) $locate example[1-3].txt
/Users/Travelholics/Test/example1.txt
/Users/Travelholics/Test/example2.txt
/Users/Travelholics/Test/example3.txt

 

4) 기타 참고하실 만한 내용은 아래와 같습니다.

키워드 사용

따로 파일 이름을 구분해줄 필요 없이 키워드만 입력하면 검색 엔진처럼 찾을 수 있습니다. 예를 들어, ‘exam’이라는 키워드에는 ‘exam-1’, ‘1-exam’, ‘example’ 등이 모두 검색됩니다.

$ locate exam

정규 표현식 ▼

특정 디렉토리 내의 파일을 찾고자 정규 표현식을 사용한다면.. 안타깝지만 아무 결과도 얻을 수 없습니다.

$ locate "/Test/.*txt" //동작하지 않음

대신 파이프 옵션을 grep 커맨드와 조합하시면 원하는 결과를 얻을 수 있습니다.

$ locate txt | grep "/Test/"

 

데이터 베이스 업데이트 방법

생성된 데이터베이스를 업데이트하는 방법입니다. 위 문단에서 쓰인 검색 데이터베이스를 생성하는 커맨드는 사용하실 필요 없습니다.

데이터베이스 업데이트 ▼

$ sudo /usr/libexec/locate.updatedb

주 단위로 자동 업데이트 ▼

* ‘weekly’를 ‘daily’, ‘monthly’로 변경하시면 업데이트 주기를 변경하실 수도 있습니다.

$ sudo periodic weekly

이상입니다.

참고

1 COMMENT

댓글 남기기