简体中文
مفهرس وباحث لنظام الملفات عبر الأنظمة الأساسية يجمع بين مزايا find
locate
Everything
، بالإضافة إلى عمليات البحث عن محتوى الملف. يعمل على Linux وmacOS وWindows.
تم تطبيق الفهرس المقلوب، وهو التقنية التي تقف وراء plocate
والذي يجعل عمليات البحث تتم في وقت شبه ثابت، في v0.4.0
والإصدارات الأحدث . لسوء الحظ، لم يتم اختبار v0.4
جيدًا، والإصدار حاليًا هو الإصدار v0.3.x
أيضًا، جميع العروض التوضيحية في الملف README تتم على v0.3.0
. بالنسبة لأجهزة الكمبيوتر الشخصية التي تحتوي عادةً على أقل من 3M من الملفات، لا يحدث الفهرس المقلوب فرقًا كبيرًا.
لا تتم فهرسة عمليات البحث عن المحتوى. سيتم العمل على فهرسة محتوى الملف إذا وصل هذا الريبو إلى 512 نجمة، لذا قم بتحطيم زر النجمة هذا إذا كان التطبيق مفيدًا لك أو إذا وجدته مثيرًا للاهتمام!
(المزيد عن هذا هنا.)
هذا الملف التمهيدي يتعلق بتطبيق CLI. بالنسبة للواجهة الأمامية لواجهة المستخدم الرسومية، راجع SearchEverywhere. (أيضا غير مستقر تماما)
بدأ العمل على هذا المشروع منذ أغسطس 2022، ولكن لم يتم نشره حتى أبريل 2023 بسبب عدد لا يحصى من الأخطاء. ربما لا يزال هناك عدد لا يحصى من الأخطاء في الوقت الحالي، حتى في الإصدار الثابت ( v0.3.x
).
التبعية الوحيدة لوقت التشغيل هي PCRE2، والملف القابل للتنفيذ الثابت بالكامل يبلغ حجمه 2.5 ميجا بايت فقط (مجردًا).
أول مفهرس ملفات Libre على الإطلاق على نظامي التشغيل macOS وWindows!؟
/System/Volumes/Data
التي find
الحيل لقطة شاشة لنظامي التشغيل macOS وWindows على التوالي:
updatedb
غير جذري ومتعدد الخيوط (SSD فقط) على عكس locate
، لا تتطلب إعادة بناء فهرس نظام الملفات إذن الجذر (أو المسؤول على نظام التشغيل Windows). لا يوجد setugid سواء.
بالنسبة لمحركات أقراص SSD، يتم إعداد تجمع مؤشرات الترابط لقراءات الدليل المتزامنة، مما يؤدي إلى تسريع سرعة القراءة بشكل كبير.
بالنسبة لمحركات الأقراص الصلبة، يجب تعطيل هذه الميزة، نظرًا لأن عمليات الإدخال والإخراج متعددة الخيوط لا توفر أي مكاسب مرئية في الأداء بسبب طبيعة الدوران الخاصة بها.
يمكن تبديل ما إذا كان يجب تمكين updatedb
متعدد مؤشرات الترابط لكل مسار.
يوضح الشكل أن orient
يمكنه فحص 810000 ملف خلال ثانية واحدة مع فقدان ذاكرة التخزين المؤقت ، لكن القرص المستخدم هو قرص متطور إلى حد ما. خذها مع حبة الملح بالرغم من ذلك.
مثل updatedb
، يتم أيضًا استخدام نفس تجمع مؤشرات الترابط لمطابقة المحتوى. استغرقت المطابقة الغامضة hello world
من شجرة مصدر Linux kernel المكونة من 75000 ملف 5.5 ثانية عند سقوط ذاكرة التخزين المؤقت و1.5 ثانية مع ذاكرة التخزين المؤقت.
(خذ بحذر؛ 16x Intel i7 11800H وNVMe SSD)
في نظام التشغيل Windows، تكون مطابقة المحتوى أبطأ بشكل ملحوظ ، وهو تأثير مشترك لتحويل UTF8 إلى UTF16، ونقص التخطيط الفعال لذاكرة kernel (
mmap(2)
) والطبيعة المتضخمة وغير الفعالة لنظام Windows.
وداعا find ... | xargs grep ...
find ... -a -exec grep ...
find
بناء الجملة مثل كما هو موضح أدناه، ينفذ orient
أيضًا أجزاء كبيرة من تطابقات find
، مما يسهل على المستخدمين التعرف على الخبرة الحالية في استخدام find
مع زيادة تنوع التطبيق أيضًا.
على عكس Everything
يتطابق أصل الكود الثابت مع مطابقة السلسلة فقط، في orient
، يمكن تطبيق -updir -downdir
على أي مسند.
كما أن -downdir
تقريبًا 0 حمل و- -updir
يجعل عمليات البحث أسرع عن طريق تخزين التطابقات الأخيرة مؤقتًا .
مطابقة الوالدين:
مطابقة الأطفال:
لينكس | ويندوز | ماك | أندرويد | رخصة | |
---|---|---|---|---|---|
Everything | ؟لا | ؟نعم | ؟لا | ؟لا | الملكية |
find | ؟نعم | ؟لا | ؟لا | ؟لا | GPLv3 |
fsearch | ؟نعم | ؟لا | ؟لا | ؟لا | GPLv2 |
locate | ؟نعم | ؟لا | ؟لا | ؟لا | GPLv3 |
orient | ؟نعم | ؟نعم | ؟نعم | ؟لا | GPLv3 |
واصل الجدول
-and -or | عكس الفهرس | تطابق الوالدين | واجهة المستخدم الرسومية | سطر الأوامر | |
---|---|---|---|---|---|
Everything | ؟نعم | ؟لا | جزئي | ؟نعم | ؟ |
find | ؟نعم | ؟لا | ؟لا | ؟لا | ؟نعم |
fsearch | ؟نعم | ؟لا | جزئي | ؟نعم | ؟لا |
locate | ؟لا | ؟نعم | ؟لا | ؟لا | ؟نعم |
orient | ؟نعم | ؟نعم | ؟نعم | ؟نعم | ؟نعم |
ملحوظات:
Everything
في CLI قد تم تحسين جميع النتائج، مما يجعل من الصعب جدًا استخدامه مع الأدوات الأخرى، ومن ثم؟ وجه.eVeRyThInG
ملكية خاصة، فقط يتم توفير SdK!!! قائدنا العزيز ريتشارد ستالمان سوف يدمره!!!والأسوأ من ذلك
Everything SDK
مليء بالحالات العالمية.؟
find
يمكن للمستخدمين الذين هم على دراية بـ find
البدء باستخدام مسندات find
المتوافقة مع orient
، مثل -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
. بدلاً من ذلك، استخدم توجيه -PRED --ARG
بناء orient
، مما يوفر أنظمة مطابقة متعددة لمسند واحد، مما يعزز إمكانية إعادة استخدام التعليمات البرمجية.
-name
-bregex
-strstr
-fuzz
--ignore-case
(except -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
مع تقديم مسندات التعديل، من الممكن "القيام بشيء ما" قبل النشر إلى press أخرى، وهو بالضبط ما يفعله -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 أولاً راجع للشغل.
يوصى بالبناء من المصدر في المرحلة المبكرة من الإصدار. اعطها فرصة! (مطلوب للإصدار v0.4.0
)
أو حتى الأفضل من ذلك، قم ببناء كل من orient
وSearchEverywhere. ومن خلال بناء SearchEverywhere
، يتم أيضًا بناء orient
. بناء التبعيات:
بصرف النظر عن CMake
، يمكن تنزيل كل التبعيات تلقائيًا بواسطة CMake.
من الممكن أيضًا استخدام أحد البرامج المثبتة، إذا كنت قد قمت بالفعل بتثبيت بعضها على نظامك، من خلال تبديل خيارات التكوين هذه أدناه.
خيارات التكوين:
ORIE_TEST
: إنشاء مجموعات اختبار GoogleTestORIE_SYSTEM_PCRE2
: استخدم مكتبة System 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
يعمل إنشاء التكوين الافتراضي على ترميز بعض نقاط البداية وتمكين القراءة متعددة الخيوط عليها جميعًا، وهو أمر دون المستوى الأمثل للأقراص الثابتة الدوارة.
إذا كنت تستخدم محركات الأقراص الثابتة، فقم بما يلي في المرة الأولى التي تقوم فيها بتشغيل 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.
أبل رائعة جدًا! كان عليهم أن يزودوا أجهزة الماك بوك الخاصة بهم بأفضل الأقراص الصلبة في العالم، وهي بالتأكيد ليست قابلة للتناوب!
يتم تنفيذ سلسلة exec
من المسندات، ولكن لم يتم اختبارها على نظام التشغيل Windows.
والخبرة المعتدلة في هندسة البرمجيات ستخبرنا أن الميزات غير المختبرة ستحتوي بالتأكيد على أخطاء، إن لم تكن تفشل تمامًا.
هناك عدد من الميزات التي لم يتم اختبارها، مع كون exec
على نظام التشغيل Windows هو الميزة الوحيدة المدرجة فعليًا في قائمة الميزات.
يتم إدراج الميزات الأخرى التي لم يتم اختبارها في قائمة المهام، ولكن ليس قائمة الميزات، بالإضافة إلى أسباب عدم اختبارها.
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 لهذا المستودع.
راجع قائمة المهام للحصول على التفاصيل.
dirent
لنظام التشغيل Windowsتم تعديله بشكل كبير هنا للارتباط الرمزي والجهاز (المزيف)، ودعم المقبس، وبالتالي يتم وضعه مباشرة في المصدر بدلاً من الوحدة النمطية.