简体中文
find
, locate
및 Everything
의 장점과 파일 콘텐츠 검색을 결합한 크로스 플랫폼 파일 시스템 인덱서 및 검색기입니다. Linux, macOS 및 Windows에서 작동합니다.
거의 일정한 시간에 검색을 수행하는 plocate
의 기술인 반전 인덱스는 v0.4.0
이상에서 구현됩니다 . 불행하게도 v0.4
제대로 테스트되지 않았으며 현재 릴리스는 v0.3.x
입니다. 또한 README의 모든 데모는 v0.3.0
에서 수행됩니다. 일반적으로 파일 수가 3M 미만인 개인용 컴퓨터의 경우 반전된 인덱스는 큰 차이를 만들지 않습니다.
콘텐츠 검색은 색인화되지 않습니다. 파일 콘텐츠 인덱싱은 이 저장소가 별 512개에 도달하면 작동하므로 앱이 유용하거나 흥미로우면 별 버튼을 부수십시오!
(이에 대한 자세한 내용은 여기를 참조하세요.)
이 README는 CLI 애플리케이션에 관한 것입니다. GUI 프런트엔드에 대해서는 SearchEverywhere를 참조하세요. (역시 상당히 불안정함)
이 프로젝트는 2022년 8월부터 작업을 시작했지만 수많은 버그로 인해 2023년 4월까지 공개되지 않았습니다. 하지만 현재 안정 버전( v0.3.x
)에서도 여전히 수많은 버그가 있을 수 있습니다.
유일한 런타임 종속성은 PCRE2이며 완전 정적 실행 파일의 크기는 2.5MiB에 불과합니다(제거됨).
macOS 및 Windows 최초의 Libre 파일 인덱서!?
find
macOS Firmlink /System/Volumes/Data
무시합니다. 각각 macOS 및 Windows의 스크린샷:
updatedb
(SSD만 해당) locate
와 달리 파일 시스템 인덱스 재구축에는 루트 권한(또는 Windows의 경우 관리자)이 필요하지 않습니다 . setugid도 없습니다.
SSD의 경우 동시 디렉터리 읽기를 위해 스레드 풀이 설정되어 읽기 속도가 대폭 향상됩니다.
HDD의 경우 멀티스레드 IO는 회전 특성으로 인해 눈에 띄는 성능 향상을 제공하지 않으므로 이 기능은 비활성화됩니다.
멀티스레드 updatedb
활성화 여부는 경로별로 전환할 수 있습니다.
그림을 보면 orient
캐시가 삭제된 상태 에서 1초 안에 810,000개의 파일을 검사할 수 있지만 사용된 디스크는 다소 고급스러운 디스크를 사용하고 있음을 보여줍니다. 그래도 소금 한 알씩 섭취하십시오.
updatedb
와 마찬가지로 콘텐츠 일치에도 동일한 스레드 풀이 사용됩니다. 75000개 파일 Linux 커널 소스 트리의 퍼지 일치 hello world
캐시가 삭제될 때 5.5초가 걸렸고 캐시가 삭제될 때 1.5초가 걸렸습니다.
(약간 고려; 16x Intel i7 11800H 및 NVMe SSD)
UTF8에서 UTF16으로의 변환, 효율적인 커널 메모리 매핑(
mmap(2)
) 부족, Windows의 비대하고 비효율적인 특성으로 인해 Windows 콘텐츠 일치 속도가 상당히 느려졌습니다 .
안녕 find ... | xargs grep ...
및 find ... -a -exec grep ...
find
유사 구문 아래에 표시된 대로 orient
find
일치 항목 의 상당 부분을 구현하여 사용자가 find
사용에 대한 기존 경험에 쉽게 익숙해지도록 하는 동시에 앱의 다양성을 높입니다.
하드 코드 상위 항목이 문자열 일치에만 일치하는 Everything
과 달리 orient
에서는 -updir -downdir
모든 조건자에 적용할 수 있습니다.
또한 -downdir
오버헤드가 거의 0이며 -updir
최근 일치 항목을 캐싱하여 검색 속도를 더욱 빠르게 만듭니다.
일치하는 부모:
일치하는 어린이:
리눅스 | 윈도우 | macOS | 기계적 인조 인간 | 특허 | |
---|---|---|---|---|---|
Everything | ?아니요 | ?예 | ?아니요 | ?아니요 | 소유권 |
find | ?예 | ?아니요 | ?아니요 | ?아니요 | GPLv3 |
fsearch | ?예 | ?아니요 | ?아니요 | ?아니요 | GPLv2 |
locate | ?예 | ?아니요 | ?아니요 | ?아니요 | GPLv3 |
orient | ?예 | ?예 | ?예 | ?아니요 | GPLv3 |
계속되는 표
-and -or | 인덱스 반전 | 상위 일치 | GUI | CLI | |
---|---|---|---|---|---|
Everything | ?예 | ?아니요 | 부분 | ?예 | ? |
find | ?예 | ?아니요 | ?아니요 | ?아니요 | ?예 |
fsearch | ?예 | ?아니요 | 부분 | ?예 | ?아니요 |
locate | ?아니요 | ?예 | ?아니요 | ?아니요 | ?예 |
orient | ?예 | ?예 | ?예 | ?예 | ?예 |
참고:
Everything
CLI는 모든 결과를 예쁘게 만들어 다른 도구와 함께 사용하기가 매우 어렵기 때문에 ? 얼굴.eVeRyThInG
독점적이며 SDK만 제공됩니다!!! 우리의 친애하는 리더 리차드 스톨먼이 핵무기를 발사할 것입니다!!!설상가상으로
Everything SDK
전역 상태로 가득 차 있습니다.?
find
-like 구문 사용 find
에 익숙한 사용자는 -regex
, -lname
, -okdir
등과 같은 orient
의 find
호환 조건자를 사용하여 시작할 수 있습니다.
orient
술어는 때때로 find
대응의 상위 집합입니다. 예를 들어 -quit
종료하기 전에 얼마나 많은 결과가 생성될 수 있는지를 의미하는 정수 인수를 선택적으로 허용합니다. 기본값은 1이므로 인수 없이 -quit
사용할 때 find
의 값과 차이가 없습니다.
orient
와 관련된 조건자의 경우 orient
스타일 구문만 제공됩니다. 아래를 참조하세요.
# mp3 or mp4 file excluding under hidden dirs
find ~ ( -name " .* " -a -prune -a -false ) -o -name " *.mp[34] "
orient ~ ( -name " .* " -a -prune -a -false ) -o -name " *.mp[34] "
# Ask user to whether to show its realpath when a symlink found in /usr
# until user inputs "yes" (realpath executes)
find /usr -type l -a -okdir realpath {} ; -a -quit
orient /usr -type l -a -okdir realpath {} ; -a -quit
# Until 2 user inputs "yes"
orient /usr -type l -a -okdir realpath {} ; -a -quit 2
# Even better, -quitmod
orient /usr -quitmod ( -type l -a -okdir realpath {} ; )
# -quit -quitmod has some quirks; see docs/predicates.md
orient
의 대체 구문 사용 orient
find
만큼 (고유한) 술어가 없습니다. 대신 -PRED --ARG
orient
을 사용하여 단일 조건자에 여러 일치 방식을 제공하여 코드 재사용성을 높입니다.
-name
-bregex
-strstr
-fuzz
--ignore-case
( -fuzz
제외) --full
--readlink
-content-{strstr,fuzz,regex}
--ignore-case
(fuzz 제외) --blocked
--allow-binary
-size
-{a,m,c}{time,min}
-inum
+
또는 -
접두사가 붙은 파일 이름 또는 정수 많은 find
호환 조건자는 실제로 다음과 같은 별칭입니다.
-lname
-name --readlink
와 동일합니다.
-regex
- -bregex --ignore-case
( b
는 기본 이름을 나타냄)
-samefile
-inode
도 파일 이름을 허용하므로 기본적으로 -inode
입니다.
권장되지는 않지만 두 구문을 함께 혼합하는 것도 가능합니다.
-iname --full
또는-anewer +5
와 같습니다.
다음은 몇 가지 간단한 예입니다. 여기에서 사용 방법에 대해 자세히 알아보세요.
# Find C source files containing "hello"; orient style only
orient / -content-strstr hello -name " *.c "
# Many `find` style predicates are actually aliases, ex:
orient / -iname " *.cpp " # find style
orient / -name --ignore-case " *.cpp " # orient style
# Assuming /home/a/b links to /var/tmp, then
# all the following 3 lines matches /home/a/b
# `-lname` is identical to `-name --readlink`
orient / -lname " *tmp "
orient / -name --readlink " *tmp "
# `orient` style is more versatile:
orient / -bregex --readlink ' tmp$ ' # No `find` style alternative
수정자 술어의 도입으로 다른 preds에 전파하기 전에 "뭔가를 수행"하는 것이 가능합니다. 이는 정확히 -updir
및 -downdir
이 수행하는 작업입니다. 파일의 상위 항목과 디렉토리의 하위 항목을 일치시킵니다.
수정자를 사용하면 -updir -downdir
하드 코드 부모가 문자열 일치에만 일치하는 Everything
과 달리 orient
의 모든 조건자에 적용될 수 있습니다.
모든 조건자에는 -updir -downdir
자체의 재귀적 사용이 포함됩니다.
또한 -downdir
오버헤드가 거의 0이며 -updir
최근 일치 항목을 캐싱하여 검색 속도를 더욱 빠르게 만듭니다.
추가 수정자에는 -prunemod
, -quitmod
및 -not
포함됩니다. 전:
# Find bin/gcc*
orient / -updir -name " gcc* " -a -executable
# Find bin/gcc* or bin/clang*
orient / -updir ( -name " gcc* " -o -name " clang* " ) -a -executable
# Find git repositories, first level only
orient / -downdir ( -name .git -a -type d ) -a -prune
# Must use -exec test on find and is extremely slow
find .. -type d -a -exec test -d ' {}/.git ' ; -a -print -a -prune
# .cc files under src directory of a git repository
orient / -updir ( -name src -a -updir -downdir -name .git ) -name " *.cc "
애플리케이션은 CLI이므로 시스템의 실행 파일을 가져오기만 하면 작동합니다.
Linux에서
-user -nouser -group -nogroup
작동하려면 glibc가 필요합니다.
불행히도 macOS ARM 버전은 그러한 머신이 없기 때문에 누락되었습니다. 문제나 토론에 효과가 있는지 자유롭게 보고해 주세요.
현재 이 앱은 배포판으로 출시하기에는 테스트가 너무 적습니다.
먼저 Arch AUR로 출시될 수 있습니다.
릴리스 초기에는 소스에서 빌드하는 것이 좋습니다. 한번 시도해 보세요! ( v0.4.0
에 필수)
아니면 orient
와 SearchEverywhere를 모두 구축하는 것이 더 좋습니다. SearchEverywhere
구축하면 orient
도 구축됩니다. 빌드 종속성:
CMake
제외하고 모든 종속성은 CMake에 의해 자동 다운로드될 수 있습니다.
아래의 구성 옵션을 전환하여 시스템에 일부를 이미 설치한 경우 설치된 것을 사용할 수도 있습니다.
옵션 구성:
ORIE_TEST
: GoogleTest 테스트 스위트 구축ORIE_SYSTEM_PCRE2
: 새 라이브러리를 컴파일하는 대신 시스템 PCRE2 라이브러리를 사용합니다.ORIE_LINK_STATIC
: 정적으로 링크 방향 실행 파일ORIE_SYSTEM_RAPIDFUZZ
: 시스템 rapidfuzz 라이브러리 사용(헤더만) 아래 OPTION
활성화된 옵션으로 바꾸고 다음 명령을 실행합니다.
git clone https://github.com/cxxsucks/orient.git
cd orient ; mkdir build ; cd build
cmake -DOPTION1=ON -DOPTION2=ON -DCMAKE_BUILD_TYPE=Release ..
make -j $( nproc )
sudo make install
기본 구성 생성은 일부 시작점을 하드 코딩하고 모든 시작점에서 멀티스레드 읽기를 활성화합니다. 이는 회전형 하드 디스크에 적합하지 않습니다.
HDD를 사용하는 경우 orient
처음 실행할 때 다음을 수행하세요.
orient -updatedb
실행Ctrl-C
로 즉시 중단~/.config/orie/default.txt
또는 %APPDATA%.oriedefault.txt
엽니다.ROOT
뒤의 경로를 검토하고, 이러한 경로 중 실제로 SSD에 없는 경로가 있으면 SSD
필드를 제거하세요.ROOT "/path/to/mountpoint"
쓰거나 IGNORED "/path/to/mountpoint"
로 인덱싱하지 마세요. Linux에서 /sys/block/sda/queue/rotational
디스크가 회전형인지 여부에 대한 통찰력을 제공합니다. 이는 안타깝게도 macOS와 Windows에는 없습니다.
향후 릴리스에서는 Linux 및 macOS에서 루트 경로를 자동 구성하는 /etc/mtab
및 /sys/.../rotational
에서 루트 포인트를 얻을 수 있습니다.
애플은 정말 멋지다! 해당 Macbook에는 세계 최고의 하드 디스크가 장착되어 있어야 하며 회전형이 아니어야 합니다!
exec
일련의 조건자는 Windows에서 구현되지만 테스트되지는 않습니다.
그리고 적당한 양의 소프트웨어 엔지니어링 경험을 통해 테스트되지 않은 기능에는 완전히 실패하지는 않더라도 확실히 오류가 포함된다는 것을 알 수 있습니다.
테스트되지 않은 기능이 많이 있으며, Windows의 exec
는 실제로 기능 목록에 나열된 유일한 기능입니다.
테스트되지 않은 다른 기능은 테스트되지 않은 이유와 함께 TODO 목록에 나열되지만 기능 목록에는 나열되지 않습니다.
find
기능대부분 전역 옵션:
-context
(SELinux 컨텍스트)-printf -fprintf -ls -fls
(인쇄 형식 지정)-newerXY
-mindepth
-maxdepth
-H -L -P
(전역 옵션을 따르는 심볼릭 링크)-D
(디버그 옵션)-O
(최적화 수준)
orient
에는find -O3
와 유사한 자체 최적화 프로그램이 있습니다.
-regextype
(하드코딩된 PCRE2)-warn -nowarn
-d -depth
(깊이 우선 검색)
orient
인덱스에 따라서만 검색할 수 있습니다.-delete
find
와 달리 영향을 받지 않습니다.
-files0-from
-mount -xdev -xautofs
(마운트로 내려가지 않음)-help -version
최근에는 문서가 작업의 중심이 될 것입니다.
버그 보고서 및 기능 요청은 이 저장소의 GitHub Issues Tracker에서 계속 허용됩니다.
자세한 내용은 TODO 목록을 참조하세요.
dirent
포트여기서는 심볼릭 링크 및 (가짜) 장치, 소켓 지원을 위해 크게 수정되었으므로 모듈 대신 소스에 직접 배치됩니다.