如何在Linux find命令中为子目录填充文件+文件夹总数占位符
实现方法
问题背景
在Bash环境下,我使用以下Linux find命令遍历/SomeFolder下的一级子目录,希望将命令中的占位符[COUNT]替换为每个子目录包含的文件与文件夹总数,该如何实现?命令如下:
find '/SomeFolder' -maxdepth 1 -mindepth 1 -type d -printf '%f **[COUNT]**\n' | sort
解决方案
根据你需要统计的是递归总条目数(含子目录内的所有文件和文件夹)还是直接子项数(仅当前目录下的一级条目),可以用以下方式实现:
方式一:基于find的批量处理(推荐)
递归统计所有条目
find '/SomeFolder' -maxdepth 1 -mindepth 1 -type d -exec sh -c ' dir="$1" count=$(find "$dir" -mindepth 1 | wc -l) printf "%s **%d**\n" "$(basename "$dir")" "$count" ' sh {} \; | sort
仅统计直接子项
find '/SomeFolder' -maxdepth 1 -mindepth 1 -type d -exec sh -c ' dir="$1" count=$(find "$dir" -maxdepth 1 -mindepth 1 | wc -l) printf "%s **%d**\n" "$(basename "$dir")" "$count" ' sh {} \; | sort
方式二:用for循环实现(更直观)
cd '/SomeFolder' || exit for dir in */; do # 递归统计用这行 count=$(find "$dir" -mindepth 1 | wc -l) # 仅统计直接子项就替换成这行:count=$(ls -1A "$dir" | wc -l) printf "%s **%d**\n" "${dir%/}" "$count" done | sort
说明
basename "$dir"和原命令中的%f作用一致,用来提取目录的短名称(不含路径)wc -l用来统计输出的行数,对应条目总数- 两种方式最后都通过
sort保持输出有序
内容的提问来源于stack exchange,提问作者Akkad
相关产品推荐
相关产品推荐

