空き時間ができたので久しぶりにrustの勉強です。
文法など少し忘れているので以前に書いたコードをいじってみました。
コマンドラインのオプション処理に使用していたclapがバージョンアップと共に以前のコードでは動かなくなっていたので書き直してみました。
以前のclap v2よりすっきりしましたね。
use anyhow::Result; // 1.0.71 use clap::Parser; // 4.3.11 use std::fs; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] struct Args { /// target directory #[arg(short, long, default_value_t = String::from(".") )] dir: String, } fn main() -> Result<()> { let args = Args::parse(); let dir_string = args.dir.to_string(); println!("{}", dir_string); let _ = get_dirs(dir_string); Ok(()) } fn get_dirs(dir: String) -> Result<()> { let mut entries = fs::read_dir(dir)?; while let Some(entry) = entries.next() { let entry = entry?; let metadata = entry.metadata()?; let path = entry.path(); if metadata.is_dir() { let path = path.display().to_string(); println!("{}", path); let _ = get_dirs(path); continue; } if let Ok(symlink) = fs::read_link(&path) { if path.is_dir() { println!("{}@ -> {}", path.display(), symlink.display()); } } } Ok(()) }