วิธีที่รวดเร็วอย่างน่าตลกในการจัดทำดัชนีและการสืบค้นระบบไฟล์ของคุณ แทนที่ตำแหน่ง / mlocate / อัปเดตb เขียนใน รัส.
Lolcate เป็นทางเลือกที่รวดเร็ว น้ำหนักเบา และอเนกประสงค์ในการค้นหา / mlocate / อัปเดตb
มันมี:
Lolcate มาเป็นไฟล์ปฏิบัติการไบนารีเดียว
Lolcate ไม่พยายามที่จะเข้ากันได้กับ mlocate / updatedb
Lolcate ดำเนินการในสองขั้นตอน:
โดยจะจัดทำดัชนีบางส่วนของระบบไฟล์ของคุณโดยปฏิบัติตาม กฎการจัดทำดัชนี บางข้อที่คุณระบุไว้เพื่อเติมฐานข้อมูลใดฐานข้อมูลหนึ่งด้วยรายการชื่อพาธที่ตรงกัน
มีการจัดทำดัชนีเฉพาะชื่อพาธของไฟล์เท่านั้น Lolcate ไม่เกี่ยวข้องกับเนื้อหา
ฐานข้อมูลที่แตกต่างกันสามารถสร้างขึ้นเพื่อวัตถุประสงค์ที่แตกต่างกัน
เมื่อใดก็ตามที่จำเป็น คุณสามารถเรียกใช้ lolcate เพื่อดำเนินการสืบค้นกับฐานข้อมูลได้ และมันจะส่งคืนชื่อพาธที่ตรงกับ กฎการสืบค้น ที่คุณระบุ
ไฟล์ปฏิบัติการไบนารี lolcate
เดียวกันนั้นดำเนินการทั้งการจัดทำดัชนีและการสืบค้น
ใช้นามแฝงและฟังก์ชันของเชลล์เพื่อค้นหาฐานข้อมูลของคุณตามที่คุณต้องการ เช่น
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> ...
ตัวอย่างเช่น ลองค้นหาไฟล์ readme ทั้งหมดจากไดเร็กทอรี Images:
$ lolcate Images readme
/home/ngirard/Images/DCIM_101CANON/readme.txt
/home/ngirard/Images/2019/01/1/Readme
/home/ngirard/Images/2018/01/1/readme
การค้นหารูปแบบคือ "smart-case" ตามค่าเริ่มต้น หมายความว่ารูปแบบต่างๆ จะถูกค้นหาโดยไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ มิฉะนั้นจะค้นหาแบบละเอียดอ่อน
ตัวอย่างเช่น การเรียกใช้แบบสอบถามล่าสุดด้วย "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 และ 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 ที่สร้างสภาพแวดล้อมการพัฒนาที่ยอดเยี่ยมเช่นนี้ เป็นสภาพแวดล้อมที่ดีที่สุดที่ฉันเคยร่วมงานด้วย!
ขอขอบคุณ Andrew Gallant สำหรับงานอันยิ่งใหญ่ของเขาและลังไม้อันล้ำค่าที่เขาเขียน ซึ่ง Lolcate อาศัย (regex, ไม่สนใจ, walkdir)
แนวทางในการสร้างฐานข้อมูลใหม่แทนที่จะอัปเดตเพื่อวัตถุประสงค์ด้านประสิทธิภาพซึ่ง Lolcate ใช้อยู่ในปัจจุบัน มีการพูดคุยกันหลายครั้งบนอินเทอร์เน็ต ฉันไม่พบบันทึกที่เกี่ยวข้องของฉัน ดังนั้น ฉันยินดีที่จะแบ่งปันข้อมูลอ้างอิงใดๆ ที่คุณสามารถให้ได้
ชื่อ "lolcate" ถูกใช้ไปแล้วสำหรับเชลล์สคริปต์ต้นแบบที่เผยแพร่เป็น Github Gist ในปี 2012 มันเป็นชื่อที่ดีเกินไปที่จะไม่นำมันกลับมาใช้ใหม่ !
เครดิตภาพแมวหัวเราะ: Rikki's Refuge