Cara yang sangat cepat untuk mengindeks dan menanyakan sistem file Anda. Menggantikan lokasi / mlokasi / updateb. Ditulis dalam Karat.
Lolcate adalah alternatif yang cepat, ringan, dan serbaguna untuk mencari / mlokasi / memperbaruib.
Ini fitur:
Lolcate hadir sebagai biner tunggal yang dapat dieksekusi.
Lolcate tidak mencoba kompatibel dengan mlocation/updateb.
Lolcate beroperasi dalam dua fase:
Ini mengindeks bagian sistem file Anda dengan mematuhi beberapa aturan pengindeksan yang Anda tentukan untuk mengisi salah satu databasenya dengan daftar nama jalur yang cocok.
Hanya nama jalur file yang diindeks, Lolcate tidak peduli dengan isinya.
Basis data yang berbeda dapat dibuat untuk tujuan yang berbeda.
Kapan pun diperlukan, Anda dapat menjalankan lolcate untuk melakukan kueri terhadap basis datanya dan lolcate akan mengembalikan nama jalur yang cocok dengan aturan kueri yang Anda tentukan.
Eksekusi biner lolcate
yang sama melakukan pengindeksan dan pembuatan kueri.
Gunakan alias dan fungsi shell untuk menanyakan database Anda sesuai keinginan Anda, misalnya
alias d= ' lolcate --db documents '
alias zik= ' lolcate --db music --type audio '
z (){ mpv --playlist <( zik $1 ) ; }
zs (){ mpv --playlist <( zik $1 | shuf ) ; }
Membuat basis data
Sebelum menggunakan Lolcate, database perlu dibuat. Mari kita buat satu:
$ 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
Karena kami tidak menentukan nama database, Lolcate memilih nama default
. Kita bisa menentukan nama database menggunakan lolcate --create --db <db_name>
.
Aturan pengindeksan: menentukan apa yang akan diindeks
Selanjutnya, kita perlu menentukan apa yang akan diindeks dengan mengedit dua file (ini mungkin berubah di versi mendatang), file config.toml
dan file ignores
.
File config.toml
tidak kosong tetapi diisi dengan konten boilerplate yang perlu Anda sesuaikan. Seharusnya terlihat seperti ini:
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
Mari kita modifikasi dan tambahkan dua direktori untuk pengindeksan:
dirs = [
"~/Images",
"~/Documents"
]
Seperti yang Anda perhatikan, direktori harus diberi tanda kutip dan dipisahkan koma. Selain itu, tanda gelombang di direktori diperluas, tetapi bukan variabel lingkungan.
Kita dapat memilih untuk mengindeks file saja dengan menyetel skip = "Dirs"
, dan hanya direktori dengan menyetel skip = "Files"
. Selain itu, tautan simbolik serta file dan direktori tersembunyi dapat dilewati dengan menyetel masing-masing ignore_symlinks = true
dan ignore_hidden = true
.
File ignores
berisi pola yang akan digunakan Lolcate untuk mengabaikan nama jalur yang cocok saat mengindeks sistem file. Sintaks file ignores
sama dengan file .gitignore. Anda dapat membiarkannya kosong jika ingin mengindeks semuanya sesuai dengan file config.toml
.
Mari kita modifikasi dan tambahkan dua pola ini:
.git
*~
Mengindeks sistem file
Sekarang, kami siap memberi tahu Lolcate untuk mengindeks sistem file sesuai dengan aturan yang baru saja kami tentukan:
$ lolcate --update
Updating default...
Sekali lagi, Lolcate memperbarui database default
secara default. Kita dapat memilih untuk memperbarui yang lain dengan mengetik lolcate --update --db <other_db>
. Kita juga bisa meminta Lolcate untuk mengupdate semua database yang kita miliki dengan mengetik lolcate --update --all
.
Menanyakan database
Sekarang database kita sudah terisi, kita dapat menjalankan query terhadapnya.
Bentuk paling sederhana adalah 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
(...)
Jika tidak ada pola yang diberikan, kueri akan mengembalikan semuanya dari database.
lolcate --all
akan mengembalikan semuanya dari semua database Anda.
Kita mungkin juga ingin menentukan pola dengan menjalankan 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
(...)
Pola ditafsirkan sebagai ekspresi reguler.
Misalnya, cari nama jalur yang mengandung 2018 atau 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
(...)
Sintaks lengkap untuk mesin regex yang digunakan oleh Lolcate tersedia di sini.
Beberapa pola dapat ditentukan menggunakan lolcate <pattern1> <pattern2> ...
.
Sebagai contoh, mari kita cari semua file readme dari direktori 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
Pencarian pola adalah "smart-case" secara default. Artinya, pola dicari dengan huruf kecil dan sensitif jika semuanya dalam huruf kecil, dan sebaliknya secara sensitif.
Misalnya, menjalankan kueri terbaru dengan "Readme" dan bukan "readme" menghasilkan:
$ lolcate Images Readme
/home/ngirard/Images/2019/01/1/Readme
Kita dapat melakukan pencarian case-insensitive menggunakan -i | --case-insensitive
Opsi -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
Sebuah pola dapat dicocokkan dengan nama dasar dari nama jalur saja, menggunakan -b | --basename
Opsi -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
Jenis jalur dapat ditentukan dan ditanyakan.
Jenis jalur dapat ditentukan dengan menambahkannya ke file konfigurasi global Lolcate. Kita dapat menemukan file ini dengan menjalankan opsi --info
:
$ lolcate --info
Config file:
/home/ngirard/.config/lolcate/config.toml
(...)
Jenis jalur berikut telah ditentukan sebelumnya:
[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)$"
tipe jalur ini dapat digunakan dalam kueri:
$ 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
Pola nama jalur, pola nama dasar, dan pola tipe dapat dicampur semuanya:
$ 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
file konfigurasi disimpan di $XDG_CONFIG_HOME/lolcate
atau di $HOME/.config/lolcate
;
file database disimpan di $XDG_DATA_HOME/lolcate
atau di $HOME/.local/share/lolcate
.
mlocate
Opsi Locate berikut tidak memiliki padanan di Lolcate: --count
, --existing
, --follow
, --transliterate
, --limit
, --nofollow
, --null
.
Ini adalah cara termudah dan direkomendasikan.
Unduh biner pra-kompilasi lolcate
terbaru dari Github ke direktori milik PATH
Anda.
Biner yang telah dikompilasi sebelumnya tersedia untuk Linux, MacOS dan Windows.
Jika perlu, instal rilis stabil Rust dan Cargo saat ini menggunakan
$ curl https://sh.rustup.rs -sSf | sh
Jika perlu, tambahkan ~/.cargo/bin
ke PATH
Anda menggunakan misalnya:
$ export PATH= $HOME /.cargo/bin: $PATH
Berlari
$ cargo install lolcate-rs
untuk mengkompilasi sumber dari rilis terbaru, atau
$ cargo install --git https://github.com/ngirard/lolcate-rs
untuk mengkompilasi sumber versi terbaru dari repositori GitHub.
Meskipun semua kontribusi diterima, kontribusi yang ideal bagi saya adalah permintaan penarikan yang terperinci, karena hal tersebut memungkinkan saya meningkatkan literasi Rust sambil meninjaunya. Terima kasih sebelumnya!
Ada sejumlah bidang yang mungkin ingin Anda pertimbangkan untuk berkontribusi:
Fitur yang paling dibutuhkan adalah cetakan warna pencocokan pola (#13).
Lolcate belum bisa digunakan sebagai perpustakaan.
Saya tidak puas dengan aturan pengabaian yang disimpan dalam file konfigurasi terpisah (#14).
Pengujian.
Saya akan sangat tertarik dengan saran tentang kode yang ada yang dapat saya gunakan kembali/manfaatkan untuk memberi Lolcate bangku pengujian yang lengkap.
Strategi latar belakang.
Lolcate saat ini menyimpan datanya sebagai daftar nama jalur terkompresi lz4, dan membuatnya kembali setiap kali lolcate --update
dijalankan. Ini sesederhana yang Anda bisa dapatkan. Meskipun ini cukup sesuai dengan selera saya, saya akan dengan senang hati mempertimbangkan alternatifnya (#15).
Pembandingan
(#16)
Saya ingin berterima kasih kepada komunitas Rust karena telah menciptakan lingkungan berkembang yang luar biasa. Ini adalah lingkungan terbaik yang pernah saya kerjakan sejauh ini!
Terima kasih banyak kepada Andrew Gallant atas karyanya yang luar biasa dan peti tak ternilai yang dia tulis, yang diandalkan oleh Lolcate (regex, abaikan, walkdir).
Pendekatan yang hanya membuat ulang database alih-alih memperbaruinya untuk tujuan kinerja, yang saat ini digunakan Lolcate, telah dibahas berkali-kali di Internet. Saya tidak dapat menemukan catatan terkait saya, jadi dengan senang hati saya akan membagikan referensi apa pun yang dapat Anda berikan.
Nama "lolcate" telah digunakan untuk prototipe skrip shell yang diterbitkan sebagai Github Gist pada tahun 2012. Nama itu terlalu bagus untuk tidak digunakan kembali!
Penghargaan untuk gambar kucing tertawa: Perlindungan Rikki