Rust를 사용하여 지정한 디렉토리에 있는 모든 파일/하위 디렉토리 리스트를 가져오는 코드입니다.
2023. 8. 20 최초작성
새로운 프로젝트 hello_path를 생성합니다.
% cargo new hello_path
Created binary (application) `hello_path` package
프로젝트 폴더 hello_path안에 다른 폴더,파일과 함께 Cargo.toml 파일이 생성됩니다.
% cd hello_path
% ls -al
total 16
drwxr-xr-x 6 webnautes staff 192 8 21 23:07 .
drwxr-xr-x+ 69 webnautes staff 2208 8 21 23:07 ..
drwxr-xr-x 9 webnautes staff 288 8 21 23:07 .git
-rw-r--r-- 1 webnautes staff 8 8 21 23:07 .gitignore
-rw-r--r-- 1 webnautes staff 179 8 21 23:07 Cargo.toml
drwxr-xr-x 3 webnautes staff 96 8 21 23:07 src
% cd src
% ls -al
total 8
drwxr-xr-x 3 webnautes staff 96 8 21 23:07 .
drwxr-xr-x 6 webnautes staff 192 8 21 23:07 ..
-rw-r--r-- 1 webnautes staff 45 8 21 23:07 main.rs
walkdir 패키지를 추가합니다.
% cargo add walkdir
Updating crates.io index
Adding walkdir v2.3.3 to dependencies.
프로젝트 폴더에서 code . 으로 비주얼 스튜디어 코드를 실행합니다.
% pwd
/Users/webnautes/hello_path
% code .
전체 코드입니다. 지정한 경로이 하위 디렉토리와 파일을 출력해줍니다.
extern crate walkdir; use walkdir::WalkDir; use std::path::Path; fn list_all_files<P: AsRef<Path>>(path: P) -> Vec<String> { let mut files = Vec::new(); // path 디렉토리의 모든 파일과 하위 디렉토리를 재귀적으로 탐색한다. let walker = WalkDir::new(path); // walker의 결과를 반복자로 변환한다. let iterator = walker.into_iter(); // iterator의 각 항목(`e`)에 대해 오류가 발생한 항목을 필터링하고 성공한 항목만 반환한다. let filtered_iterator = iterator.filter_map(|e| e.ok()); // 필터링된 결과를 entry로 하나씩 꺼내서 처리한다. for entry in filtered_iterator { // 항목의 유형이 파일인지 확인한다. if entry.file_type().is_file() { // 해당 항목의 경로를 문자열로 변환하여 files 벡터에 추가한다. let file_path = entry.path().display().to_string(); files.push(file_path); } } return files; } fn main() { let path = "/usr"; // 원하는 디렉토리로 변경하세요. let files = list_all_files(path); for file in files { println!("{}", file); } } |
'Rust > Rust 강좌' 카테고리의 다른 글
간단하게 정리해본 Rust 강좌 6 : 모듈 (0) | 2023.10.28 |
---|---|
간단하게 정리해본 Rust 강좌 5 : 문자열, utf-8 (0) | 2023.10.28 |
간단하게 정리해본 Rust 강좌 4 : 소유권, 참조, 역참조, 생명주기 (0) | 2023.10.28 |
간단하게 정리해본 Rust 강좌 3 : 열거형, 제네릭 데이터 타입, Option, Result, unwrap, vector (0) | 2023.10.28 |
간단하게 정리해본 Rust 강좌 2 : if-else, loop, while, for, match, struct, method (2) | 2023.10.28 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!