[Rust] Path에 glob이 없어서 외부 크레인의 glob과 globmatch를 사용해 봤습니다.
개시하다
파일을 수집할 때 Ruby가 있음
Pathname.glob
.그러나 Rust의 Path는 glob이 없어서 실망했다.
그곳에서 외부 기중기에서 발견된 아래 두 개를 사용해 보았다.
$ exa -T a
a
└── b
└── c
├── 1.png
├── 2.png
└── 3.PNG
그나저나 이 exa는 Rust에서 만든 ls풍 도구로 경로에 일본어가 함유되어 있든 없든 나무에 이상하게 나타나지 않는다.일반 tree 명령에는 -N 옵션이 없으면 일본어가 표시되지 않습니다.
cargo install exa
를 통해exa를 설치할 수 있습니다.글로브 편
간단한 사용법
use glob::glob;
let files = glob("a/**/*.png")
.unwrap()
.map(|e| e.unwrap())
.collect::<Vec<_>>();
println!("{:?}", files);
// >> ["a/b/c/1.png", "a/b/c/2.png"]
3.PNG
가 나타나지 않은 것은 대소문자를 구분하기 때문이다.이럴 때
a/**/*.{png,PNG}
라고 적으면 PNG와 일치할 수도 있지만 이동하지 않는다(왜?)대소문자 구별 중지
use glob::glob_with;
use glob::MatchOptions;
let mut options = MatchOptions::new();
options.case_sensitive = false; // false:大小文字の区別をしない
let files = glob_with("a/**/*.png", options)
.unwrap()
.map(|e| e.unwrap())
.collect::<Vec<_>>();
println!("{:?}", files);
// >> ["a/b/c/1.png", "a/b/c/2.png", "a/b/c/3.PNG"]
case_sensitive
를 false
로 설정하면 png
에서도 일치한다PNG
를 알 수 있다.가능하면
case_sensitive: false
를 초기값으로 설정해 주시기 바랍니다.globmatch 편
간단한 사용법
let files = globmatch::Builder::new("a/**/*.{png,PNG}")
.build(".")
.unwrap()
.into_iter()
.flatten()
.collect::<Vec<_>>();
// files は PathBuf の配列
println!("{:?}", files);
// >> ["./a/b/c/2.png", "./a/b/c/3.PNG", "./a/b/c/1.png"]
여기도 대소문자 차이가 있지만 초기값a/**/*.{png,PNG}
으로 쓸 수 있습니다!그런 점에서 이게 더 사용하기 쉬운 것 같아요.
Reference
이 문제에 관하여([Rust] Path에 glob이 없어서 외부 크레인의 glob과 globmatch를 사용해 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/megeton/articles/5e16c6a0b395a4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)