在Ubuntu中的bash下,我希望ls -lah
目录并让它递归显示目录的文件计数。也就是说,我希望它计数目录及其子目录中的所有文件。
这个是可能的吗?
发布于 2021-10-20 16:39:33
我在这里忽略了使用ls
的请求,因为大多数Unixes上的实用程序的输出通常只适合于查看。
下面将使用find
和bash
递归地计算当前目录的每个子目录中的名称数。
find . -type d -exec bash -O nullglob -O dotglob -c '
for dirpath do
set -- "$dirpath"/*
printf "%s:\t%d\n" "$dirpath" "$#"
done' bash {} +
它使用一批目录路径名调用bash
,内联脚本在给定的批处理上迭代,并在每个批处理中扩展*
全局模式。通过设置nullglob
和dotglob
shell选项,这将扩展为(可能隐藏的)名称列表,而$#
是该列表的长度。
如果您只想要当前工作目录中最上层目录的计数:
shopt -s globstar nullglob dotglob
for dirpath in */; do
set -- "$dirpath"/**
printf '%s:\t%d\n' "$dirpath" "$#"
done
这几乎是一样的,但我们不再需要使用find
。我们使用**
递归地覆盖每个目录下的所有名称,然后像以前一样显示结果。
事实上,我们可以轻微地修改它,以重新创建第一段代码,而根本不需要find
。递归地获取每个目录中的名称计数:
shopt -s globstar nullglob dotglob
for dirpath in **/; do
set -- "$dirpath"/*
printf '%s:\t%d\n' "$dirpath" "$#"
done
注意,我只将一个*
从一个地方移到另一个地方。
https://unix.stackexchange.com/questions/674058
复制相似问题