Una forma cómicamente rápida de indexar y consultar su sistema de archivos. Reemplaza localizar/mlocate/actualizadob. Escrito en óxido.
Lolcate es una alternativa rápida, liviana y versátil para localizar/mlocate/actualizadob.
Cuenta con:
Lolcate viene como un único ejecutable binario.
Lolcate no intenta ser compatible con mlocate/actualizadob.
Lolcate opera en dos fases:
Indexa partes de su sistema de archivos obedeciendo algunas reglas de indexación que usted especificó para completar una de sus bases de datos con la lista de nombres de rutas coincidentes.
Sólo se indexan los nombres de las rutas de los archivos, a Lolcate no le preocupa su contenido.
Se pueden crear diferentes bases de datos para diferentes propósitos.
Siempre que sea necesario, puede ejecutar lolcate para realizar consultas en sus bases de datos y devolverá los nombres de ruta que coincidan con las reglas de consulta que especificó.
El mismo ejecutable binario lolcate
realiza tanto la indexación como la consulta.
Utilice alias y funciones de shell para consultar sus bases de datos a su gusto, por ejemplo
alias d= ' lolcate --db documents '
alias zik= ' lolcate --db music --type audio '
z (){ mpv --playlist <( zik $1 ) ; }
zs (){ mpv --playlist <( zik $1 | shuf ) ; }
Creando una base de datos
Antes de utilizar Lolcate, es necesario crear una base de datos. Creemos uno:
$ 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
Como no especificamos el nombre de la base de datos, Lolcate eligió el nombre default
. Podríamos haber especificado el nombre de la base de datos usando lolcate --create --db <db_name>
.
Reglas de indexación: especificar qué indexar
A continuación, debemos especificar qué indexar editando dos archivos (esto podría cambiar en una versión futura), el archivo config.toml
y el archivo ignores
.
El archivo config.toml
no viene vacío, sino que está lleno de contenidos repetitivos que deberás personalizar. Debería verse así:
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
Modifiquémoslo y agreguemos dos directorios para indexar:
dirs = [
"~/Images",
"~/Documents"
]
Como habrás notado, los directorios deben estar entre comillas y separados por comas. Además, se expanden las tildes de los directorios, pero no las variables de entorno.
Podemos optar por indexar solo archivos configurando skip = "Dirs"
y solo directorios configurando skip = "Files"
. Además, los enlaces simbólicos y los archivos y directorios ocultos se pueden omitir configurando ignore_symlinks = true
e ignore_hidden = true
respectivamente.
El archivo ignores
contiene patrones que Lolcate usará para ignorar los nombres de ruta coincidentes mientras indexa el sistema de archivos. La sintaxis del archivo ignores
es la misma que la de los archivos .gitignore. Puede dejarlo vacío si desea indexar todo según el archivo config.toml
.
Modifiquémoslo y agreguemos estos dos patrones:
.git
*~
Indexando el sistema de archivos
Ahora, estamos listos para decirle a Lolcate que indexe el sistema de archivos de acuerdo con las reglas que acabamos de especificar:
$ lolcate --update
Updating default...
Nuevamente, Lolcate actualiza la base de datos default
de forma predeterminada. Podemos optar por actualizar otro escribiendo lolcate --update --db <other_db>
. También podemos pedirle a Lolcate que actualice todas las bases de datos que tengamos escribiendo lolcate --update --all
.
Consultando una base de datos
Ahora que nuestra base de datos está completa, podemos ejecutar consultas en ella.
La forma más simple es simplemente 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
(...)
Cuando no se proporciona ningún patrón, la consulta devuelve todo lo que hay en la base de datos.
lolcate --all
devolverá todo lo de todas sus bases de datos.
También es posible que deseemos especificar un patrón ejecutando 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
(...)
Los patrones se interpretan como expresiones regulares.
Por ejemplo, busquemos nombres de ruta que contengan 2018 o 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
(...)
La sintaxis completa del motor de expresiones regulares utilizado por Lolcate está disponible aquí.
Se pueden especificar múltiples patrones usando lolcate <pattern1> <pattern2> ...
.
Por ejemplo, busquemos todos los archivos Léame del directorio Imágenes:
$ lolcate Images readme
/home/ngirard/Images/DCIM_101CANON/readme.txt
/home/ngirard/Images/2019/01/1/Readme
/home/ngirard/Images/2018/01/1/readme
La búsqueda de patrones es "smart-case" por defecto. Significa que los patrones se buscan sin distinguir entre mayúsculas y minúsculas cuando están todos en minúsculas y con sensibilidad en caso contrario.
Por ejemplo, ejecutar la última consulta con "Léame" en lugar de "léame" da:
$ lolcate Images Readme
/home/ngirard/Images/2019/01/1/Readme
Podemos realizar una búsqueda que no distinga entre mayúsculas y minúsculas utilizando -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
Un patrón se puede comparar únicamente con el nombre base de los nombres de ruta, utilizando -b | --basename
--opción -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
Los tipos de ruta se pueden definir y consultar.
Los tipos de ruta se pueden definir agregándolos al archivo de configuración global de Lolcate. Podemos localizar este archivo invocando la opción --info
:
$ lolcate --info
Config file:
/home/ngirard/.config/lolcate/config.toml
(...)
Los siguientes tipos de ruta están predefinidos:
[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)$"
Estos tipos de ruta se pueden utilizar en consultas:
$ 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
Los patrones de nombres de rutas, patrones de nombres básicos y patrones de tipos se pueden mezclar por completo:
$ 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
los archivos de configuración se almacenan en $XDG_CONFIG_HOME/lolcate
o en $HOME/.config/lolcate
;
los archivos de la base de datos se almacenan en $XDG_DATA_HOME/lolcate
o en $HOME/.local/share/lolcate
.
mlocate
Las siguientes opciones de localización no tienen equivalente en Lolcate: --count
, --existing
, --follow
, --transliterate
, --limit
, --nofollow
, --null
.
Esta es la forma más fácil y recomendada.
Descargue el último binario precompilado lolcate
de Github en un directorio que pertenezca a su PATH
.
Los binarios precompilados están disponibles para Linux, MacOS y Windows.
Si es necesario, instale la versión estable actual de Rust and Cargo usando
$ curl https://sh.rustup.rs -sSf | sh
Si es necesario, agregue ~/.cargo/bin
a su PATH
usando, por ejemplo:
$ export PATH= $HOME /.cargo/bin: $PATH
Correr
$ cargo install lolcate-rs
para compilar las fuentes de la última versión, o
$ cargo install --git https://github.com/ngirard/lolcate-rs
para compilar la última versión de las fuentes del repositorio de GitHub.
Si bien todas las contribuciones son bienvenidas, las contribuciones ideales para mí serían solicitudes de extracción detalladas, ya que me permitirían mejorar mis conocimientos sobre Rust mientras las reviso. Gracias de antemano !
Hay una serie de áreas en las que quizás quieras considerar contribuir:
La característica más necesaria es la impresión en color de coincidencias de patrones (#13).
Lolcate aún no se puede utilizar como biblioteca.
No estoy satisfecho con que las reglas de ignorar se mantengan en un archivo de configuración separado (n.º 14).
Pruebas.
Me interesaría mucho recibir consejos sobre el código existente que podría reutilizar/aprovechar para proporcionarle a Lolcate un banco de pruebas completo.
Estrategia de backend.
Actualmente, Lolcate almacena sus datos como una lista de nombres de rutas comprimida con lz4 y los recrea cada vez que se ejecuta lolcate --update
. Es lo más simple que puedes conseguir. Aunque funciona bastante bien para mi gusto, me encantaría considerar alternativas (n.º 15).
Evaluación comparativa
(#16)
Deseo agradecer a la comunidad de Rust por producir un entorno de desarrollo tan excelente. ¡Es el mejor entorno en el que he trabajado hasta ahora!
Un gran agradecimiento a Andrew Gallant por su tremendo trabajo y las invaluables cajas que escribió, en las que se basa Lolcate (regex, ignore, walkdir).
El enfoque de simplemente recrear la base de datos en lugar de actualizarla por motivos de rendimiento, que utiliza actualmente Lolcate, se ha discutido varias veces en Internet. No pude encontrar mis notas relacionadas, por lo que sería un placer compartir cualquier referencia que pueda proporcionarme.
El nombre "lolcate" ya se usó para un prototipo de script de shell publicado como Github Gist en 2012. ¡Era un nombre demasiado bueno para no reutilizarlo!
Créditos por la imagen del gato riendo: Rikki's Refuge