'찾기'속도를 높이는 방법이 있습니까


15

find터미널에서 속도 를 높일 수 있는 방법이 있는지 궁금합니다. 인터넷 google을 사용하여 검색하면 문자열이나 파일 이름에 대한 로컬 검색을 수행하는 것보다 속도가 빠르다는 것은 의미가 없습니다.

find 명령이 매우 빠를 수있는 로컬 인덱싱 기반을 구축 할 수있는 방법이 궁금합니다.

아니면 다른 제안?

감사!


운영 체제 및 / 또는 배포를 사용하여 게시물을 편집 할 수 있습니까?
Jodie C

답변:


15

를 사용해보십시오 locate. 원하는대로해야합니다.


13
일반적으로 답변을 조금 더 구체화하는 것이 좋습니다. 어떤 패키지 locate가 (일반적으로 slocate) 나오는지 언급 updatedb하고 DB를 다시 작성하는 데 사용 합니다. :-)
Patrick

1
인덱싱이 해제 된 파티션에서는 작동하지 않습니다. 예를 들어 인덱싱이 활성화 된 경우 NTFS 파티션의 성능이 저하되어 찾기 기능이 "있는 그대로"작동하지 않습니다.
ojrask

9

검색 기준에 따라 다릅니다.

파일 이름 또는 파일 이름 패턴을 검색하는 경우, 사용 된 색인은 일반적으로 하루에 한 번만 업데이트되므로 찾기가 훨씬 빠르지 만 새로 생성 된 파일에는 적합하지 않습니다. 그러나 그것을 사용할 수 있다면 매우 빠릅니다.

그러나 찾기 기능을 사용하면 파일 크기, 파일 수명 및 기타 항목을 검색 할 수 있습니다. 이는 찾기로 검색 할 수 없습니다.

검색 위치 를 알고 있으면 경로 를 사용하여 검색 범위를 구분할 수 있습니다 .

find /some/path -size -10M -size +2M -mtime -365 ...

/ some / path에서 최대 1 년 된 2-10M의 파일 만 검색합니다.

where, help, lib 및 configuration 파일을 사용하여 경로에서 사용 가능한 프로그램을 검색 할 수 있습니다. 예 :

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

사용하다 locate

그 이유는 상상했던대로 이미 구축 된locate 모든 기존 디렉토리와 파일의 데이터베이스 를 사용하기 때문입니다 ! http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

설정 한 (및 변경 가능한) 간격으로 작업이 실행되면 파일 시스템을 스캔 한 다음 데이터베이스를 사용하여 데이터베이스를 빌드합니다. 그런 다음이 데이터베이스 (locatedb)이며 locate해당 시점에서 하드 드라이브를 스캔하는 대신 명령이 수행 하는 적절한 색인이 있습니다.

단점 은 하드 드라이브 스캔에 비해 매우 빠르다는 것입니다. 단점은로 케이트 데이터베이스 (locatedb)가 '실시간'이 아니므로 마지막 스캔에서 '현재'파일이있는 경우에만 사용할 수 있다는 것입니다.

locatedb를 업데이트하려면 지금 실행하십시오 updatedb(또는 sudo updatedb필요한 경우).

btw 방금 sudo updatedb로컬로 달렸고 3 1/2 초가 걸렸습니다! 31,000 개의 파일이 있습니다.


1

다른 사람들이 지적했듯이, locate는 더 간단한 검색기에 더 좋은 도구 일 수 있습니다.

그러나 더 복잡한 검색의 경우 찾기가 고착되었을 수 있습니다.

찾기 속도를 높이는 한 가지 방법은 모든 루트 디렉토리를 검색하는 대신 파일이있는 디렉토리를 좁히는 것입니다.


0

단일 검색 작업을 위해; 나는 속도 향상을 찾지 못했다; find옵션을 사용하여 검색 범위를 좁히려 고하지 않는 한 .

하나; 당신이 원하는 경우에 여러 find파일의 동일한 세트에서 작업을 ; 모든 파일 이름으로 임시 파일을 채우고을 사용하여 상당한 속도를 얻었습니다 grep. 물론 이것은 추가되거나 삭제 된 파일을 고려하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.