如何让ls -fR输出find命令风格的全路径文件列表
核心解答
标准 GNU/BSD 版本的ls均没有提供内置参数开关,可以让ls -fR直接输出全路径格式的递归结果,你需要对输出做轻量解析。
高效解析方案(适配百万级文件量)
可以用一行低开销的awk命令实现格式转换,额外处理耗时几乎可以忽略:
# 输出所有条目(含目录、符号链接等,排除.和..) ls -fR /目标主目录路径 | awk ' /:$/&&sub(/:$/,""){cur_dir=$0;next} NF&&$0!="."&&$0!=".."{print cur_dir "/" $0} '
如果需要和find -type f一致,仅输出普通文件,可以加-p参数让ls给目录末尾追加/标识,再过滤即可,无需额外调用stat类命令消耗性能:
# 仅输出普通文件,和find -type f结果一致 ls -fRp /目标主目录路径 | awk ' /:$/&&sub(/:$/,""){cur_dir=$0;next} NF&&$0!="."&&$0!=".."&&!/\/$/{print cur_dir "/" $0} '
内容的提问来源于stack exchange,提问作者Jerry Fan
相关产品推荐
相关产品推荐

