find
터미널 속도를 높이는 방법이 있는지 궁금합니다. 인터넷 Google을 사용하여 검색하는 것이 로컬 검색 문자열이나 파일 이름보다 속도가 더 빠르다는 것은 말이되지 않습니다.
일단 확립되면 나중에 find 명령을 매우 빠르게 수행할 수 있는 로컬 인덱스 기반을 가질 수 있는 방법이 있는지 궁금합니다.
아니면 다른 제안이 있으신가요?
감사해요!
답변1
을 사용해 보십시오 locate
. 원하는 대로 작동해야 합니다.
답변2
이는 주로 검색 기준에 따라 달라집니다.
파일 이름이나 파일 이름 패턴을 검색하는 경우 찾기가 훨씬 빠르지만, 사용되는 색인은 일반적으로 하루에 한 번만 업데이트되므로 새로 생성된 파일에는 적합하지 않습니다. 하지만 사용할 수 있다면 매우 빠릅니다.
그러나 find를 사용하면 파일 크기, 파일 기간 및 찾기로 검색할 수 없는 기타 항목을 검색할 수 있습니다.
당신이 알고 있었다면어디검색하려면 다음을 사용할 수 있습니다.길검색 범위:
find /some/path -size -10M -size +2M -mtime -365 ...
/some/path에 있는 2~10M 크기의 파일(최대 1년)만 검색됩니다.
경로에서 사용 가능한 프로그램은 다음을 통해 검색할 수 있습니다.어느;도움말, lib 및 구성 파일어디. 예:
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
-exec, -execdir, -ok 또는 -okdir(예: GNU-find에서 사용 가능)을 사용하여 찾은 모든 파일에 대해 프로그램을 실행하면 여러 파일을 한 번에 프로그램에 전달할 수 있습니다(프로그램이 여러 매개변수 호출을 지원하는 경우). , ";" 대신 "+"로 명령을 종료합니다. 예:
find -name "*.pdf" -exec ls -l {} "+"
이렇게 하면 전체 프로세스 속도가 크게 향상될 수 있지만 개인 상황에 따라 많은 부분이 달라집니다.
답변3
사용locate
그 이유는 locate
기존의 모든 디렉터리와 파일의 데이터베이스를 사용하기 위해서 입니다.이미 구축됨상상했던 그대로!
http://linux.about.com/od/commands/l/blcmdl5_ locatedb.htm
특정 설정(및 변경 가능) 간격으로 작업 실행은 파일 시스템을 스캔하고 이를 사용하여 데이터베이스를 구축합니다. 그러면 명령은 locate
현재 하드 드라이브를 검색하는 대신 이 데이터베이스( locatedb ) 및 해당 인덱스에 대해 작동합니다.
그래서 이득은 이렇습니다매우하드 디스크 검색에 비해 속도가 빠릅니다. 단점은 찾은 데이터베이스( locatedb )가 "라이브"가 아니기 때문에 마지막 검사 "현재" 존재했던 파일에만 사용할 수 있다는 것입니다.
locatedb를 업데이트하려면 지금 실행하세요 updatedb
(또는 sudo updatedb
필요한 경우).
그런데 방금 sudo updatedb
로컬에서 실행했는데 3 1/2초가 걸렸습니다! 31,000개의 파일이 있습니다.
답변4
단일 검색 작업의 경우 options 를 사용하여 검색 범위를 좁히지 않는 한 속도가 향상되는 것을 느끼지 못했습니다 find
.
그러나 원한다면;find
동일한 파일 세트에 대해 여러 작업 수행; 임시 파일을 모든 파일 이름으로 채우고 를 사용합니다 grep
. 물론 추가되거나 삭제된 파일은 고려되지 않습니다.