리눅스2023. 8. 11. 11:28

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/622218 (2018.12.3)

파일을 검색할 때 개인적으로 가장 요긴하게 사용하는 명령어가 find인데, 파일 수가 엄청나게 많은 상황에서 특정 파일의 위치를 확인하려면 시간이 꽤 걸릴 수 있다. 이럴 경우 locate를 사용하면 훨씬 빠르게 결과를 얻을 수 있다.

파일 시스템을 직접 검색하는 find와 달리, locate는 파일 정보가 저장되어 있는 데이터베이스(DB)를 검색해서 결과를 출력하기 때문에 속도가 훨씬 빠르다. 검색 조건과 관련된 옵션에 있어서는 find가 훨씬 유연하고 다양하므로 필요에 따라 두가지 명령을 상호보완적으로 사용하면 되겠다.

가장 간단한 예로, 파일시스템 어딘가에 my_file.txt 파일이 어디에 있는지 보려면 아래와 같이 입력하면 된다.

# my_file.txt 파일 위치 확인
locate my_file.txt

파일 또는 디렉토리 명칭에 문자열 "abc"를 포함하는 경우를 찾으려면 아래와 같이 입력

# 파일/디렉토리 명칭에 문자열 abc가 포함된 경우
locate abc

파일명(basename)에 문자열 "abc"를 포함하는 경우를 찾으려먼 아래와 같이 입력한다. 디렉토리에 "abc"가 포함되는 경우가 있을 수 있으므로 -b 옵션으로 파일명에 대해서만 일치 여부를 확인한다.

# 파일명에 문자열 "abc"를 포함하는 경우
locate -b abc

정규표현식(regular expression, regex)도 사용할 수 있다. --regex 옵션을 추가하면 된다. 아래의 예시를 보자.

# 연속되는 수자 3개를 포함한 경우
locate --regex "[0-9][0-9][0-9]"

# 파일명에 연속되는 수자 3개를 포함한 경우
locate -b --regex "[0-9][0-9][0-9]"

grep과 조합하면 좀 더 복잡한 검색이 가능하다.

# 파일명에 연속되는 수자 3개를 포함하면서 마지막에 txt로 끝나는 파일
locate -b --regex "[0-9][0-9][0-9]" | grep "txt$"

728x90
Posted by 반달가면