use std::env; use std::io; use std::fs; use std::os::unix::fs::PermissionsExt; use std::os::linux::fs::MetadataExt; mod fswalk; use fswalk::DirTree; // Command line args are names of dirs, recursively list all files and // dirs them fn main() -> io::Result<()> { for dirname in env::args().skip(1) { let tree = DirTree::new(&dirname); for entry in tree { write_info(&entry.path(), &entry.metadata()); } } Ok(()) } fn write_info(path: &str, meta: &fs::Metadata) { println!("Name: {}", path); println!("Mtime: {}", format_mtime(meta)); println!("Mode: {}", format_mode(meta)); println!("Ino: {}", format_inode(meta)); println!("Dev: {}", format_dev(meta)); println!("Nlink: {}", format_nlink(meta)); println!("Size: {}", format_size(meta)); println!("Uid: {}", format_uid(meta)); println!("Username: {}", format_username(meta)); println!("Gid: {}", format_gid(meta)); println!("Group: {}", format_group(meta)); println!("SHA256: xxx"); println!(""); } fn format_mtime(meta: &fs::Metadata) -> String { let mtime = meta.modified().unwrap(); format!("{:?}", mtime) } fn format_mode(meta: &fs::Metadata) -> String { let mode = meta.permissions().mode(); format!("{:06o}", mode) } fn format_inode(meta: &fs::Metadata) -> String { format!("{}", meta.st_ino()) } fn format_dev(meta: &fs::Metadata) -> String { format!("{}", meta.st_dev()) } fn format_nlink(meta: &fs::Metadata) -> String { format!("{}", meta.st_nlink()) } fn format_size(meta: &fs::Metadata) -> String { format!("{}", meta.len()) } fn format_uid(meta: &fs::Metadata) -> String { format!("{}", meta.st_uid()) } fn format_gid(meta: &fs::Metadata) -> String { format!("{}", meta.st_gid()) } fn format_username(meta: &fs::Metadata) -> String { format!("xxx") } fn format_group(meta: &fs::Metadata) -> String { format!("xxx") }