Skip to content

Latest commit

 

History

History
34 lines (26 loc) · 1.2 KB

skip-dot.zh.md

File metadata and controls

34 lines (26 loc) · 1.2 KB

跳过点(隐藏)文件时,遍历目录

[![walkdir-badge]][walkdir] [![cat-filesystem-badge]][cat-filesystem]

使用filter_entry深度递归,传递的是is_not_hidden断言,因此跳过隐藏的文件和目录。Iterator::filter应用到每个WalkDir::DirEntry,即使父目录是隐藏目录。

根目录"."的结果输出,是通过is_not_hidden断言中WalkDir::depth的使用。

extern crate walkdir;

use walkdir::{DirEntry, WalkDir};

fn is_not_hidden(entry: &DirEntry) -> bool {
    entry
         .file_name()
         .to_str()
         .map(|s| entry.depth() == 0 || !s.starts_with("."))
         .unwrap_or(false)
}

fn main() {
    WalkDir::new(".")
        .into_iter()
        .filter_entry(|e| is_not_hidden(e))
        .filter_map(|v| v.ok())
        .for_each(|x| println!("{}", x.path().display()));
}