답변:
업데이트 : locate의 인수와 관련 하여 locate의 regex 옵션 과 쉘의 파일 이름 확장 에 대한 참고 사항 ...
SHELL FILENAME EXPANSION
입력 할 때 locate /bin/b*
(따옴표가 없음) 몇 가지 일이 발생합니다.
locate
많은 개별 커맨드 라인 인자로 전달된다 . locate
그런 다음 각 인수를 데이터베이스의 각 파일에 대해 테스트하고 일치하는 결과를 출력합니다. 그러나 'locate'에는 현재 작업 디렉토리의 개념이 없습니다. 데이터베이스의 정규화 된 파일 이름에 대해서만 arg를 일치시킵니다 .
이 모두 일치하는 것으로이 수단 /bin/bash
과 /home/user/bin/brackets
당신이 통제 어느 정도이 방법이 있지만,의 위치를 정규식 검색 또한 제공을; 다른 찾기 옵션도 마찬가지입니다.
LOCATE 'S REGEX OPTION
입력 할 때 locate -r "/bin/b.*"
간단한 인수와 다른 일이 발생합니다. ( shell-expanded-args 는 단순한 인수의 목록입니다)
-r
옵션은 찾기 를 통해 arg를 정규식 패턴으로 처리합니다. locate -r "^/bin/b.*"
시작하는 파일 이름을 생성합니다 . / home / user / bin / b로 시작하는 파일 이름을 생성합니다 . ~ /는 "따옴표"로 보호 되지 않으므로 ~ /를 / home / user /로 변환 하는 쉘 물결표 확장에 종속됩니다.locate -r ~/"bin/b.*"
요약 : "shell filname expansion"은 'regex'와는 상당히 다릅니다
이제 원래 게시물로 돌아갑니다.
locate
일반적으로 전체 데이터베이스를 stdout으로 나열하므로 필터링해야하는 특정 디렉토리로 제한하기 위해 ... 찾기의 옵션을 통해이를 수행 할 수 있습니다.
쉘 글 로빙보다는 찾기의 정규 표현식 기능을 사용할 수 있습니다 ... ( locate /dir/myfile*
쉘 글 로빙입니다) ...
에서 정보를 찾을 수 : -r
,--regex
주의 : -i =이 사건을 무시한다
. . . . . -r = 정규식
. . . . . ~ /는 쉘에 의해 / home / user로 확장됩니다 (~ /가 따옴표가 아닌 경우)
. . . . . '\' (baskslash + space; 따옴표 없음)는 리터럴 공백입니다 (쉘 확장을 피하기 위해). 문자열을 따옴표로 묶을 수 있지만 ~ / 는 따옴표 밖에 두어야 합니다. ~/my\ regex
또는-/"my regex"
예. locate -ir ~/".*"la\ bella\ vita
는 locate -ir ~/".*la bella vita"
"La Bella Vita"에 대한 전체 홈 디렉토리와 동일하며 어디에서나 발생합니다.
검색을 파일 이름 으로 만 제한 할 수 있지만 -b
또는 --basename
..을 사용 하여 정규식 줄 시작 ^
이 기본 이름에만 적용됩니다.
가장 일반적으로 locate -bir
PS .. Locate
는 너무 빠르기 때문에 결코 사용 하지 않았습니다find
... 노틸러스 검색을 사용하지 않았습니다 (너무 느립니다)
'locate'를 사용하면 새로 추가 된 것을 찾고 있다면 sudo updatedb
locate의 데이터베이스를 새로 고치기 위해 실행하십시오 ...
이처럼 grep을 통해 파이프
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
편집 : 다른 대답이 더 낫습니다. 패턴을 찾아서 찾을 수 있다는 것을 몰랐습니다.
locate
않는 O(log(n))
이상 검색 locatedb
당신은 그것을 비 정규식 검색 쿼리를 줄 때를, 당신은 사용할 수 있습니다 grep
수행의 정규식을 O(m)
이미 감소 하위 결과를 통해 검색을. (n = locatedb
[예 : 모든 드라이브 파일]에 있는 총 항목 수 , m =에 적은 수의 항목 수 locatedb
), 총 실행 복잡도 : O(log(n)) + O(m)
, 여기서 m은 평균 log(n)
이므로 수행 할 때 2*O(log(n))
와 달리 O(n)
모든 항목에 걸쳐 정규식 쿼리 locatedb
.
O(log(n))
검색 O(n)
입니까? db의 항목 수는 각 경우에 동일합니다. 검색 알고리즘이라고 생각합니까?
당신은 사용할 수 있습니다 locate /rootpath/*filenamespec
. 나는 전에 시도하지 않았지만 작동하는 것처럼 보입니다. 당신의 모범을 보이기 위해서는locate /home/tim/science/*math*
이런 종류의 행동 find
보다는 명령 을보고 싶을 수도 locate
있습니다. 구문은 다음과 같습니다 find rootforsearch -name filenamepattern -print
. 이 경우 예제에는 find /home/tim/science -name *math* -print
. 검색 할 데이터베이스가없는 것만 큼 빠르지 않습니다. 실제로 파일 시스템을 검색합니다. 실제로 파일로 작업하려는 경우 인쇄 이외의 다른 옵션을 사용할 수 있습니다.
locate
자체적 으로 사용 하고 (와 같은 다른 유틸리티 grep
가 필요하지 않음) 정규 표현식없이 (이 경우에는 좋지만 불필요한) 최상의 답변 입니다.