简体中文
ตัวสร้างดัชนีและผู้ค้นหาระบบไฟล์ข้ามแพลตฟอร์มที่รวมข้อดีของ find
, locate
และ Everything
รวมถึงการค้นหาเนื้อหาไฟล์ ทำงานบน Linux, macOS และ Windows
Inverted Index ซึ่งเป็นเทคโนโลยีที่อยู่เบื้องหลัง plocate
ซึ่งทำให้การค้นหาเสร็จสิ้นในเวลาใกล้เคียงค่าคง ที่ ถูกนำมาใช้ใน v0.4.0
ขึ้นไป น่าเสียดายที่ v0.4
ยังไม่ได้รับการทดสอบอย่างดี และขณะนี้รุ่นวางจำหน่ายคือ v0.3.x
นอกจากนี้ การสาธิตทั้งหมดใน README เสร็จสิ้นแล้วบน v0.3.0
สำหรับคอมพิวเตอร์ส่วนบุคคลที่มักจะมีไฟล์น้อยกว่า 3M ดัชนีกลับด้านไม่ได้สร้างความแตกต่างมากนัก
การค้นหาเนื้อหาไม่ได้รับการจัดทำดัชนี การทำดัชนีเนื้อหาไฟล์ การจัดทำดัชนีจะดำเนินการหาก repo นี้ถึง 512 ดาว ดังนั้นให้ทุบปุ่มดาวนั้นหากแอปพิสูจน์ว่ามีประโยชน์สำหรับคุณหรือหากคุณพบว่ามันน่าสนใจ!
(เพิ่มเติมเกี่ยวกับเรื่องนี้ ที่นี่ )
README นี้เป็นเรื่องเกี่ยวกับแอปพลิเคชัน CLI สำหรับส่วนหน้า GUI โปรดดูที่ SearchEverywhere (ยังค่อนข้างไม่เสถียร)
โปรเจ็กต์นี้เริ่มทำงานตั้งแต่เดือนสิงหาคม 2022 แต่ไม่ได้เผยแพร่จนกระทั่งเดือนเมษายน 2023 เนื่องจากมีข้อบกพร่องนับไม่ถ้วน แม้ว่าในปัจจุบันอาจมีข้อผิดพลาดนับไม่ถ้วน แม้จะอยู่ในเวอร์ชันเสถียร ( v0.3.x
)
การพึ่งพารันไทม์เพียงอย่างเดียวคือ PCRE2 และไฟล์ปฏิบัติการแบบคงที่โดยสมบูรณ์มีขนาดเพียง 2.5MiB (ถอดออก)
ตัวสร้างดัชนีไฟล์ Libre ตัวแรกบน macOS และ Windows!?
/System/Volumes/Data
ที่ find
เทคนิค ภาพหน้าจอบน macOS และ Windows ตามลำดับ:
updatedb
แบบมัลติเธรด (SSD เท่านั้น) ต่างจาก locate
การสร้างดัชนีระบบไฟล์ใหม่ ไม่ จำเป็นต้องได้รับอนุญาตจากรูท (หรือผู้ดูแลระบบบน Windows) ไม่มีการตั้งค่าใดเช่นกัน
สำหรับ SSD เธรดพูลจะถูกตั้งค่าสำหรับการอ่านไดเร็กทอรีพร้อมกัน ซึ่งจะช่วยเร่งความเร็วในการอ่านได้อย่างมาก
สำหรับ HDD คุณสมบัตินี้จะถูกปิดการใช้งาน เนื่องจาก IO แบบมัลติเธรดไม่ได้ทำให้ประสิทธิภาพเพิ่มขึ้นอย่างเห็นได้ชัดเนื่องจากลักษณะการหมุนของพวกมัน
ไม่ว่าจะเปิดใช้งาน updatedb
แบบมัลติเธรดหรือไม่ก็สามารถสลับไปตามเส้นทางได้
รูปภาพแสดงให้เห็นว่า orient
สามารถสแกนไฟล์ได้ 810,000 ไฟล์ภายใน 1 วินาทีโดยที่ แคชลดลง แต่ดิสก์ที่ใช้นั้นเป็นดิสก์ที่ค่อนข้างสูง เอามันไปด้วยเม็ดเกลือ
เช่นเดียวกับ updatedb
เธรดพูลเดียวกันยังใช้สำหรับการจับคู่เนื้อหาด้วย การจับคู่แบบคลุมเครือ hello world
จากแผนผังต้นทางเคอร์เนล Linux 75000 ไฟล์ใช้เวลา 5.5 วินาทีเมื่อแคชหลุดและ 1.5 วินาทีพร้อมแคช
(ลองพิจารณาดู 16x Intel i7 11800H และ NVMe SSD)
ในการจับคู่เนื้อหาของ Windows จะ ช้าลงอย่างมาก ผลกระทบรวมของการแปลง UTF8 เป็น UTF16 การขาดการแมปหน่วยความจำเคอร์เนลที่มีประสิทธิภาพ (
mmap(2)
) และลักษณะที่ป่องและไม่มีประสิทธิภาพของ Windows
ลาก่อน find ... | xargs grep ...
และ find ... -a -exec grep ...
find
-like ไวยากรณ์ ดังที่แสดงด้านล่าง orient
ยังนำการจับคู่ของ find
มาใช้งานเป็น ส่วนใหญ่ ทำให้ผู้ใช้สามารถทำความคุ้นเคยกับประสบการณ์ที่มีอยู่ในการใช้ find
ได้อย่างง่ายดาย ในขณะเดียวกันก็เพิ่มความอเนกประสงค์ของแอปด้วย
ไม่เหมือนกับ Everything
ที่ฮาร์ดโค้ดพาเรนต์จับคู่กับการจับคู่สตริงเท่านั้น ใน orient
สามารถใช้ -updir -downdir
กับเพรดิเคตใดก็ได้
นอกจากนี้ -downdir
มีค่าใช้จ่ายเกือบ 0 และ -updir
ทำให้การค้นหา เร็วขึ้น ด้วย การแคชการจับคู่ล่าสุด
ผู้ปกครองที่ตรงกัน:
จับคู่เด็ก:
ลินุกซ์ | หน้าต่าง | ระบบปฏิบัติการ macOS | หุ่นยนต์ | ใบอนุญาต | |
---|---|---|---|---|---|
Everything | ?เลขที่ | ?ใช่ | ?เลขที่ | ?เลขที่ | กรรมสิทธิ์ |
find | ?ใช่ | ?เลขที่ | ?เลขที่ | ?เลขที่ | GPLv3 |
fsearch | ?ใช่ | ?เลขที่ | ?เลขที่ | ?เลขที่ | GPLv2 |
locate | ?ใช่ | ?เลขที่ | ?เลขที่ | ?เลขที่ | GPLv3 |
orient | ?ใช่ | ?ใช่ | ?ใช่ | ?เลขที่ | GPLv3 |
ตารางต่อ
-and -or | สลับดัชนี | จับคู่ผู้ปกครอง | กุย | คลีไอ | |
---|---|---|---|---|---|
Everything | ?ใช่ | ?เลขที่ | บางส่วน | ?ใช่ | - |
find | ?ใช่ | ?เลขที่ | ?เลขที่ | ?เลขที่ | ?ใช่ |
fsearch | ?ใช่ | ?เลขที่ | บางส่วน | ?ใช่ | ?เลขที่ |
locate | ?เลขที่ | ?ใช่ | ?เลขที่ | ?เลขที่ | ?ใช่ |
orient | ?ใช่ | ?ใช่ | ?ใช่ | ?ใช่ | ?ใช่ |
หมายเหตุ:
Everything
จะมีผลลัพธ์ ที่สวยงาม ซึ่งทำให้ยากต่อการใช้ร่วมกับเครื่องมืออื่นๆ ดังนั้น ? ใบหน้า.eVeRyThInG
เป็น pRoPrIeTaRy, OnLy SdK pRoViDeD!!! ที่รักของเรา rIcHaRd StAlLman จะ NuKe มัน!!!ที่แย่กว่านั้นคือ
Everything SDK
เต็มไปด้วยสถานะระดับโลก?
find
-like ผู้ใช้ที่คุ้นเคยกับ find
สามารถเริ่มต้นอย่างรวดเร็วด้วย orient
's find
เพรดิเคตที่เข้ากันได้ เช่น -regex
, -lname
, -okdir
และอื่นๆ
โปรดทราบว่าบางครั้งเพรดิเคต 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
orient
ใช้ไวยากรณ์ -PRED --ARG
แทน โดยให้รูปแบบการจับคู่หลายรูปแบบแก่เพรดิเคตเดียว ช่วยเพิ่มความสามารถในการนำโค้ดกลับมาใช้ใหม่ได้
-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
สามารถใช้กับเพรดิเคตใดๆ ใน orient
ได้ ซึ่งแตกต่างจาก Everything
ที่ฮาร์ดโค้ดพาเรนต์จับคู่กับการจับคู่สตริงเท่านั้น
เพรดิเคต ใดๆ รวมถึงการใช้ -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 ก่อน btw
แนะนำให้สร้างจากแหล่งที่มาในช่วงแรกของการเปิดตัว ให้มันยิง! (จำเป็นสำหรับ v0.4.0
)
หรือดียิ่งกว่านั้น สร้างทั้ง orient
และ SearchEverywhere ด้วยการสร้าง SearchEverywhere
orient
ก็ถูกสร้างขึ้นเช่นกัน สร้างการพึ่งพา:
นอกเหนือจาก CMake
แล้ว CMake ยังสามารถดาวน์โหลดการอ้างอิงทั้งหมดได้โดยอัตโนมัติ
การใช้อันที่ติดตั้งไว้ก็เป็นไปได้เช่นกัน หากคุณได้ติดตั้งบางส่วนลงในระบบของคุณแล้ว โดยการสลับตัวเลือกการกำหนดค่าเหล่านี้ด้านล่าง
กำหนดค่าตัวเลือก:
ORIE_TEST
: สร้างชุดทดสอบ GoogleTestORIE_SYSTEM_PCRE2
: ใช้ System PCRE2 Library แทนที่จะคอมไพล์ใหม่ORIE_LINK_STATIC
: ลิงก์ปฏิบัติการแบบโอเรียนท์แบบคงที่ORIE_SYSTEM_RAPIDFUZZ
: ใช้ System Rapidfuzz Library (ส่วนหัวเท่านั้น) แทนที่ 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 (แต่คาดไว้) ไม่มี
ในการเปิดตัวในอนาคต จุดรูทจะได้รับจาก /etc/mtab
และ /sys/.../rotational
ซึ่งกำหนดค่าเส้นทางรูทอัตโนมัติบน Linux และ macOS
ApPlE เย็นสบาย! พวกเขาต้องมีอุปกรณ์พร้อมสำหรับการจัดการที่ยากที่สุดในโลกและแน่นอนว่าไม่ใช่การดำเนินการแบบโรตารี!
เพรดิเคตชุด exec
ถูกนำมาใช้ แต่ไม่ได้ทดสอบบน Windows
และประสบการณ์ด้านวิศวกรรมซอฟต์แวร์ในระดับปานกลางจะบอกได้ว่าฟีเจอร์ที่ยังไม่ผ่านการทดสอบนั้นจะต้องมีข้อผิดพลาดอย่างแน่นอน หากไม่ล้มเหลวทันที
มีฟีเจอร์ที่ยังไม่ผ่านการทดสอบจำนวนหนึ่ง โดยที่ exec
บน Windows เป็นฟีเจอร์เดียวที่แสดงอยู่ในรายการฟีเจอร์จริงๆ
คุณลักษณะที่ยังไม่ทดสอบอื่นๆ จะแสดงอยู่ในรายการสิ่งที่ต้องทำ แต่ไม่ใช่รายการคุณลักษณะ พร้อมด้วยเหตุผลที่ไม่ทดสอบ
find
ที่ไม่ได้ใช้งานตัวเลือกระดับโลกส่วนใหญ่:
-context
(บริบท SELinux)-printf -fprintf -ls -fls
(รูปแบบการพิมพ์)-newerXY
-mindepth
-maxdepth
-H -L -P
(symlink ตามตัวเลือกส่วนกลาง)-D
(ดีบัก)-O
(ปรับระดับให้เหมาะสม)
orient
มีเครื่องมือเพิ่มประสิทธิภาพของตัวเองคล้ายกับfind -O3
-regextype
(ฮาร์ดโค้ด PCRE2)-warn -nowarn
-d -depth
(ค้นหาเชิงลึกก่อน)
orient
สามารถค้นหาตามดัชนีเท่านั้น-delete
จะไม่ได้รับผลกระทบ ไม่เหมือนfind
-files0-from
-mount -xdev -xautofs
(อย่าลงมาในการเมานต์)-help -version
เอกสารจะเป็นศูนย์กลางของงานเมื่อเร็ว ๆ นี้
รายงานข้อผิดพลาดและคำขอคุณลักษณะยังคงได้รับการยอมรับใน GitHub Issues Tracker ของที่เก็บนี้
ดูรายการสิ่งที่ต้องทำสำหรับรายละเอียด
dirent
ไปยัง Windowsมีการแก้ไขอย่างมากที่นี่สำหรับอุปกรณ์ symlink และอุปกรณ์ (ปลอม) การสนับสนุนซ็อกเก็ต ดังนั้นจึงถูกวางลงในซอร์สโดยตรงแทนที่จะเป็นโมดูล