지난 몇 년간 하드디스크 가격이 크게 하락하면서 우리는 컴퓨터에 수백 기가바이트, 심지어 테라바이트 단위의 데이터를 저장하는 데 익숙해졌습니다. 데이터가 늘어난 만큼 원하는 정보를 빠르게 찾는 능력도 그만큼 중요해졌는데요. 다행히 리눅스에는 바로 이런 작업을 위해 'find'라는 아주 유용한 명령줄 도구가 준비되어 있습니다. 이 글에서는 find 명령어의 핵심 기능과 실전에서 바로 활용할 수 있는 예제들을 소개합니다. 분명 큰 도움이 될 겁니다.
find 명령어의 기본 문법
find 명령어는 다음과 같은 형식으로 사용합니다:
# find [검색 위치] [조건]
간단한 사용 예시입니다:
# find -name "*.txt"
./Documents/articles/doctor_dolittle.txt
./Documents/articles/Installing_Redhat_Linux.txt
./Desktop/todo_list.txt
위 명령어는 현재 디렉터리와 모든 하위 디렉터리에서 확장자가 .txt인 파일을 검색합니다. 여기서 눈여겨볼 점은 find의 모든 인수가 완전히 선택 사항이라는 것입니다. 즉, 그냥 find만 입력하고 엔터 키를 눌러도 결과를 얻을 수 있는데, 이 경우 현재 디렉터리와 하위 디렉터리의 모든 파일 목록이 출력됩니다. 직접 실행해 보세요.
여러 디렉터리 동시에 검색하기
여러 디렉터리에서 텍스트 파일을 찾고 싶다면 검색할 경로를 차례로 나열하면 됩니다:
# find /home/hobbes/ /home/calvin/ -name "*.txt"
/home/calvin/Documents/articles/doctor_dolittle.txt
/home/calvin/Desktop/todo_list.txt
/home/hobbes/Desktop/articles.txt
/home/hobbes/data_logging.txt
검색을 실행하다 보면 대개 권한 부족으로 인한 오류 메시지가 함께 출력됩니다. 이때 오류 메시지를 /dev/null로 보내면 결과를 훨씬 깔끔하게 확인할 수 있습니다:
find /home/hobbes/ /home/calvin/ -name "*.txt" 2>/dev/null
대소문자 구분 없이 검색하기
기본적으로 find 검색은 대소문자를 구분합니다. 따라서 "picasso"로 검색하면 "Picasso"는 결과에 나타나지 않습니다. 이런 경우에는 -iname 옵션을 사용하세요:
# find /home/calvin/ -iname "picasso"
./Documents/images/picasso.png
./Documents/articles/The_artist_Picasso.doc
시간 기준으로 파일 찾기
find 명령어에는 재미있는 활용 팁이 많습니다. 예를 들어 최근 45분 이내에 수정된 파일을 시간 기반 검색으로 찾을 수 있습니다:
# find /home/calvin/ -mmin -45
./hello.txt
./artwork.jpg
같은 방식으로 15분 전부터 25분 전 사이에 수정된 파일도 검색할 수 있습니다:
# find -mmin +15 -mmin -25
검색 깊이 조절하기
하위 디렉터리를 어느 수준까지 탐색할지도 직접 지정할 수 있습니다. 다음 명령어는:
# find /home/calvin/ -maxdepth 2 -name "*.txt"
지정된 디렉터리의 상위 두 단계까지만 내려가면서 .txt 확장자를 가진 파일을 찾습니다. 반대로 최소 두 단계 아래부터 검색하라고 지시할 수도 있습니다:
# find /home/calvin/ -mindepth 2 -name "*.txt"
./artexpo.txt
./Documents/project.txt
검색 결과를 파일로 저장하기
대부분의 명령어와 마찬가지로 출력 결과를 파일로 내보낼 수 있습니다. 검색 결과를 로그로 남기고 싶다면 다음과 같이 입력하세요:
# find /home/calvin/ -name "*.txt" > /tmp/search.log
마치며
find 명령어는 제대로 익히면 놀랍도록 유용한 도구입니다. 이 명령어 하나만으로 책 한 권을 쓸 수 있을 정도인데요. 이번 글에서 소개한 내용은 그 방대한 기능 중 극히 일부에 불과합니다. 더 많은 기능이 궁금하다면 find 매뉴얼 페이지(man page)를 확인해 보세요. 또한 find와 다른 명령어를 조합하면 검색 후 치환 같은 고급 작업까지도 손쉽게 수행할 수 있습니다.