طريقة سريعة بشكل هزلي لفهرسة نظام الملفات الخاص بك والاستعلام عنه. يستبدل تحديد الموقع/mlocate/updateb. مكتوب في الصدأ.
Lolcate هو بديل سريع وخفيف الوزن ومتعدد الاستخدامات لتحديد موقع/mlocate/updateb.
ويتميز:
يأتي Lolcate كملف ثنائي واحد قابل للتنفيذ.
لا يحاول Lolcate أن يكون متوافقًا مع mlocate/updateb.
تعمل Lolcate على مرحلتين:
يقوم بفهرسة أجزاء من نظام الملفات الخاص بك عن طريق اتباع بعض قواعد الفهرسة التي حددتها لملء إحدى قواعد البيانات الخاصة به بقائمة أسماء المسارات المطابقة.
تتم فهرسة أسماء مسارات الملفات فقط، ولا يهتم Lolcate بمحتوياتها.
يمكن إنشاء قواعد بيانات مختلفة لأغراض مختلفة.
كلما لزم الأمر، يمكنك تشغيل lolcate لإجراء استعلامات على قواعد البيانات الخاصة به وسيقوم بإرجاع أسماء المسارات المطابقة لقواعد الاستعلام التي حددتها.
يقوم نفس الملف الثنائي lolcate
القابل للتنفيذ بإجراء الفهرسة والاستعلام.
استخدم الأسماء المستعارة والوظائف الخاصة بـ Shell للاستعلام عن قواعد البيانات الخاصة بك حسب رغبتك، على سبيل المثال
alias d= ' lolcate --db documents '
alias zik= ' lolcate --db music --type audio '
z (){ mpv --playlist <( zik $1 ) ; }
zs (){ mpv --playlist <( zik $1 | shuf ) ; }
إنشاء قاعدة بيانات
قبل استخدام Lolcate، يجب إنشاء قاعدة بيانات. لنقم بإنشاء واحدة:
$ lolcate --create
Created database ' default ' .
Please edit:
- the configuration file: /home/ngirard/.config/lolcate/default/config.toml
- the ignores file: /home/ngirard/.config/lolcate/default/ignores
نظرًا لأننا لم نحدد اسم قاعدة البيانات، فقد اختار Lolcate الاسم default
. كان بإمكاننا تحديد اسم قاعدة البيانات باستخدام lolcate --create --db <db_name>
.
قواعد الفهرسة: تحديد ما سيتم فهرسته
بعد ذلك، نحتاج إلى تحديد ما سيتم فهرسته عن طريق تحرير ملفين (قد يتغير هذا في إصدار مستقبلي)، ملف config.toml
وملف ignores
.
لا يأتي الملف config.toml
فارغًا ولكنه مملوء بمحتويات معيارية ستحتاج إلى تخصيصها. يجب أن يبدو مثل هذا:
description = " "
# Directories to index.
dirs = [
# "~/first/dir",
# "/second/dir"
]
# Set to "Dirs" or "Files" to skip directories or files.
# If unset, or set to "None", both files and directories will be included.
# skip = "Dirs"
# Set to true if you want skip symbolic links
ignore_symlinks = false
# Set to true if you want to index hidden files and directories
ignore_hidden = false
# Set to true to read .gitignore files and ignore matching files
gitignore = false
دعونا نعدله ونضيف دليلين للفهرسة:
dirs = [
"~/Images",
"~/Documents"
]
كما لاحظت، يجب أن تكون الأدلة مقتبسة ومفصولة بفواصل. أيضًا، يتم توسيع علامات المد في الدلائل، ولكن ليس متغيرات البيئة.
يمكننا اختيار فهرسة الملفات فقط عن طريق الإعداد skip = "Dirs"
، والأدلة فقط عن طريق الإعداد skip = "Files"
. بالإضافة إلى ذلك، يمكن تخطي الروابط الرمزية والملفات والأدلة المخفية عن طريق تعيين ignore_symlinks = true
و ignore_hidden = true
على التوالي.
يحتوي ملف ignores
على أنماط سيستخدمها Lolcate لتجاهل أسماء المسارات المطابقة أثناء فهرسة نظام الملفات. بناء جملة الملف ignores
هو نفسه الموجود في ملفات .gitignore. يمكنك تركه فارغًا إذا كنت تريد فهرسة كل شيء وفقًا لملف config.toml
.
دعونا نعدله ونضيف هذين النمطين:
.git
*~
فهرسة نظام الملفات
الآن، نحن جاهزون لإخبار Lolcate بفهرسة نظام الملفات وفقًا للقواعد التي حددناها للتو:
$ lolcate --update
Updating default...
مرة أخرى، يقوم Lolcate بتحديث قاعدة البيانات default
بشكل افتراضي. يمكننا اختيار تحديث واحد آخر عن طريق كتابة lolcate --update --db <other_db>
. يمكننا أيضًا أن نطلب من Lolcate تحديث جميع قواعد البيانات الموجودة لدينا عن طريق كتابة lolcate --update --all
.
الاستعلام عن قاعدة بيانات
الآن بعد أن تم ملء قاعدة البيانات الخاصة بنا، يمكننا تشغيل الاستعلامات عليها.
أبسط نموذج هو lolcate [--db <dbname>]
:
$ lolcate
/home/ngirard/Images/DCIM_101CANON/_MG_0006.jpg
/home/ngirard/Images/DCIM_101CANON/_MG_0007.jpg
/home/ngirard/Images/DCIM_101CANON/_MG_0004.jpg
(...)
عندما لا يتم إعطاء أي نمط، يقوم الاستعلام بإرجاع كل شيء من قاعدة البيانات.
lolcate --all
سيعيد كل شيء من جميع قواعد البيانات الخاصة بك.
قد نرغب أيضًا في تحديد نمط عن طريق تشغيل lolcate [--db <dbname>] <pattern>
:
$ lolcate 2018
/home/ngirard/Images/2018/01/9/IMG_1057.JPG
/home/ngirard/Images/2018/01/9/IMG_1059.JPG
/home/ngirard/Images/2018/01/9/IMG_1060.JPG
(...)
يتم تفسير الأنماط على أنها تعبيرات عادية.
على سبيل المثال، لنبحث عن أي أسماء مسارات تحتوي على 2018 أو 2019:
$ lolcate 201[89]
/home/ngirard/Images/2018/01/9/IMG_1057.JPG
/home/ngirard/Images/2018/01/9/IMG_1059.JPG
(...)
/home/ngirard/Images/2019/01/9/IMG_1055.JPG
/home/ngirard/Images/2019/01/9/IMG_1058.JPG
(...)
الصيغة الكاملة لمحرك regex الذي يستخدمه Lolcate متاحة هنا.
يمكن تحديد أنماط متعددة باستخدام lolcate <pattern1> <pattern2> ...
.
على سبيل المثال، لنبحث عن جميع الملفات التمهيدية من دليل الصور:
$ lolcate Images readme
/home/ngirard/Images/DCIM_101CANON/readme.txt
/home/ngirard/Images/2019/01/1/Readme
/home/ngirard/Images/2018/01/1/readme
يتم البحث عن الأنماط بواسطة "الحالة الذكية" افتراضيًا. وهذا يعني أنه يتم البحث في الأنماط بشكل غير حساس لحالة الأحرف عندما تكون جميعها مكتوبة بأحرف صغيرة، وبحساسية خلاف ذلك.
على سبيل المثال، يؤدي تشغيل أحدث استعلام باستخدام "Readme" بدلاً من "readme" إلى ما يلي:
$ lolcate Images Readme
/home/ngirard/Images/2019/01/1/Readme
يمكننا إجراء بحث غير حساس لحالة الأحرف باستخدام -i | --case-insensitive
:
$ lolcate -i Images README
/home/ngirard/Images/DCIM_101CANON/readme.txt
/home/ngirard/Images/2019/01/1/Readme
/home/ngirard/Images/2018/01/1/readme
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images.txt
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig1.jpg
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig2.png
يمكن مطابقة النمط مع الاسم الأساسي لأسماء المسارات فقط، باستخدام -b | --basename
:
$ lolcate -b images
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images.txt
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig1.jpg
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig2.png
يمكن تعريف أنواع المسارات والاستعلام عنها.
يمكن تعريف أنواع المسارات عن طريق إضافتها إلى ملف التكوين العام الخاص بـ Lolcate. يمكننا تحديد موقع هذا الملف عن طريق استدعاء خيار --info
:
$ lolcate --info
Config file:
/home/ngirard/.config/lolcate/config.toml
(...)
تم تحديد أنواع المسارات التالية مسبقًا:
[types]
img = ".*\.(jp.?g|png|gif|JP.?G)$"
video = ".*\.(flv|mp4|mp.?g|avi|wmv|mkv|3gp|m4v|asf|webm)$"
doc = ".*\.(pdf|chm|epub|djvu?|mobi|azw3|odf|ods|md|tex|txt)$"
audio = ".*\.(mp3|m4a|flac|ogg)$"
يمكن استخدام أنواع المسارات هذه في الاستعلامات:
$ lolcate --type img cropping
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig1.jpg
/home/ngirard/Documents/READMEs/2018-05-15-Cropping_images_fig2.png
يمكن دمج أنماط اسم المسار وأنماط الاسم الأساسية وأنماط الكتابة معًا:
$ lolcate --basename [eé]conomie --type doc
/home/ngirard/Documents/Notes/2018-11-12-Economie_politique.tex
/home/ngirard/Documents/Notes/2019-01-03-Économie_politique.md
$ lolcate --basename [eé]conomie --type doc 2018
/home/ngirard/Documents/Notes/2018-11-12-Economie_politique.tex
يتم تخزين ملفات التكوين إما في $XDG_CONFIG_HOME/lolcate
أو في $HOME/.config/lolcate
؛
يتم تخزين ملفات قاعدة البيانات إما في $XDG_DATA_HOME/lolcate
أو في $HOME/.local/share/lolcate
.
mlocate
خيارات Locate التالية ليس لها مكافئ في Lolcate: --count
, --existing
, --follow
, --transliterate
, --limit
, --nofollow
, --null
.
هذه هي الطريقة الأسهل والموصى بها.
قم بتنزيل أحدث lolcate
ثنائي تم تجميعه مسبقًا من Github إلى دليل ينتمي إلى PATH
الخاص بك.
الثنائيات المجمعة مسبقًا متاحة لأنظمة التشغيل Linux وMacOS وWindows.
إذا لزم الأمر، قم بتثبيت الإصدار المستقر الحالي من Rust and Cargo باستخدام
$ curl https://sh.rustup.rs -sSf | sh
إذا لزم الأمر، أضف ~/.cargo/bin
إلى PATH
الخاص بك باستخدام على سبيل المثال:
$ export PATH= $HOME /.cargo/bin: $PATH
يجري
$ cargo install lolcate-rs
لتجميع المصادر من الإصدار الأخير، أو
$ cargo install --git https://github.com/ngirard/lolcate-rs
لتجميع أحدث إصدار من المصادر من مستودع GitHub.
على الرغم من أن جميع المساهمات مرحب بها، إلا أن المساهمات المثالية بالنسبة لي ستكون طلبات سحب مفصلة للغاية، لأنها ستسمح لي بتحسين معرفتي بالقراءة والكتابة في Rust أثناء مراجعتها. شكرا مقدما!
هناك عدد من المجالات التي قد ترغب في التفكير في المساهمة فيها:
الميزة الأكثر حاجة هي النسخة المطبوعة الملونة لمطابقات النمط (#13).
Lolcate غير قابل للاستخدام بعد كمكتبة.
لست راضيًا عن قواعد التجاهل التي يتم الاحتفاظ بها في ملف تكوين منفصل (#14).
اختبار.
سأكون مهتمًا جدًا بالحصول على نصيحة بشأن الكود الحالي الذي يمكنني إعادة استخدامه/الاستفادة منه لتزويد Lolcate بمنصة اختبار كاملة.
استراتيجية الخلفية.
يقوم Lolcate حاليًا بتخزين بياناته كقائمة مضغوطة بأسماء المسارات باستخدام lz4، ويعيد إنشائها في كل مرة يتم فيها تشغيل lolcate --update
. انها بسيطة كما يمكنك الحصول عليها. على الرغم من أنه يعمل بشكل جيد بما يكفي لذوقي، سأكون سعيدًا بالنظر في البدائل (رقم 15).
قياس الأداء
(#16)
أود أن أشكر مجتمع Rust على إنتاج مثل هذه البيئة النامية الرائعة. إنها أفضل بيئة عملت معها حتى الآن!
شكرًا جزيلاً لأندرو جالانت على عمله الهائل والصناديق التي لا تقدر بثمن التي كتبها، والتي يعتمد عليها Lolcate (التعبير العادي، التجاهل، Walkdir).
لقد تمت مناقشة أسلوب إعادة إنشاء قاعدة البيانات ببساطة بدلاً من تحديثها لأغراض الأداء، والذي يستخدمه Lolcate حاليًا، عدة مرات على الإنترنت. لم أتمكن من العثور على ملاحظاتي ذات الصلة، لذا يسعدني مشاركة أي مراجع يمكنك تقديمها.
لقد تم بالفعل استخدام اسم "lolcate" لنموذج أولي لنص برمجي تم نشره باسم Github Gist في عام 2012. لقد كان اسمًا جيدًا جدًا بحيث لا يمكن إعادة استخدامه!
اعتمادات صورة القط الضاحك: ملجأ ريكي