파일 시스템을 인덱싱하고 쿼리하는 매우 빠른 방법입니다. 찾기/mlocate/업데이트를 대체합니다. Rust로 작성되었습니다.
Lolcate는 찾기/이동/업데이트를 위한 빠르고 가벼우며 다재다능한 대안입니다.
특징:
Lolcate는 단일 바이너리 실행 파일로 제공됩니다.
Lolcate는 mlocate/updateb와 호환되도록 시도하지 않습니다.
Lolcate는 두 단계로 작동합니다.
일치하는 경로 이름 목록으로 데이터베이스 중 하나를 채우기 위해 지정한 일부 인덱싱 규칙을 준수하여 파일 시스템의 일부를 인덱싱합니다.
파일의 경로 이름만 색인화되며 Lolcate는 해당 내용에 관심이 없습니다.
다양한 목적으로 다양한 데이터베이스를 생성할 수 있습니다.
필요할 때마다 locate를 실행하여 데이터베이스에 대해 쿼리를 수행할 수 있으며, 그러면 지정한 쿼리 규칙 과 일치하는 경로 이름이 반환됩니다.
동일한 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 --update --all
입력하여 Lolcate에 우리가 가지고 있는 모든 데이터베이스를 업데이트하도록 요청할 수도 있습니다.
데이터베이스 쿼리
이제 데이터베이스가 채워졌으므로 이에 대해 쿼리를 실행할 수 있습니다.
가장 간단한 형식은 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
(...)
Lolcate에서 사용하는 정규식 엔진의 전체 구문은 여기에서 확인할 수 있습니다.
lolcate <pattern1> <pattern2> ...
사용하여 여러 패턴을 지정할 수 있습니다.
예를 들어, Images 디렉토리에서 모든 readme 파일을 찾아보겠습니다.
$ 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
를 사용하여 대소문자를 구분하지 않고 검색을 수행할 수 있습니다. -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
옵션을 사용하여 경로 이름의 기본 이름에 대해서만 패턴을 일치시킬 수 있습니다. -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
.
이것이 가장 쉽고 권장되는 방법입니다.
Github에서 사전 컴파일된 최신 lolcate
바이너리를 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 커뮤니티에 감사의 말씀을 전하고 싶습니다. 지금까지 작업한 환경 중 최고의 환경입니다!
Lolcate가 사용하는 엄청난 작업과 그가 작성한 귀중한 상자(regex,ignor,walkdir)에 대해 Andrew Gallant에게 큰 감사를 드립니다.
현재 롤케이트가 사용하고 있는 성능상의 목적으로 데이터베이스를 업데이트하는 대신 단순히 데이터베이스를 다시 생성하는 방식은 인터넷 상에서 여러 차례 논의된 바 있다. 관련 노트를 찾을 수 없으므로 귀하가 제공할 수 있는 참고 자료를 공유해 드리겠습니다.
"lolcate"라는 이름은 이미 2012년 Github Gist로 게시된 프로토타입 쉘 스크립트에 사용되었습니다. 재사용하지 않기에는 너무 좋은 이름이었습니다!
웃고 있는 고양이 이미지의 출처: Rikki's Refuge