반응형

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);
    }
}

 

 

반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts