如何在当前目录中并排获取每个文件夹中的文件夹列表和编号文件?

Kid*_*g_C 5 command-line files

我在目录下: /home/john/my_test_files/ 在目录下有 100 个文件夹:

folder1
folder2
folder3
...
folder100
Run Code Online (Sandbox Code Playgroud)

我将使用什么命令来并排打印文件夹列表和每个文件的数量。像这样的东西:

folder1     25
folder2     78
folder3     34
...
folder100   88
Run Code Online (Sandbox Code Playgroud)

其中folder1有 25 个文件,其中folder2有 78 个文件,等等

我确定这是基本的东西,但我找不到好的答案......

Lie*_*tok 3

du -s --inodes *我想到了(--inodes该选项仅在较新的 ubuntu 版本中可用,我相信在 16.04 及更高版本中)。这将打印类似的内容

4       logs
1       pom.xml
140     src
323     target
Run Code Online (Sandbox Code Playgroud)

目录/文件名前面的数字是目录内的文件和目录的数量,包括目录本身。

为了说明这个数字,我们看一下logs目录。

$ find logs
logs
logs/2019-11-17-2.log.gz
logs/latest.log
logs/2019-11-17-1.log.gz
$ find logs | wc -l
4
Run Code Online (Sandbox Code Playgroud)

您会看到该目录包含 3 个文件,加上目录本身提供了 4 个文件,如du输出中所示。

请注意,计算find输出中的行数并不是确定文件数量的可靠方法,因为包含换行符的文件名会计算两次。在我的简单示例中,这没有问题,但在您的情况下,此方法可能不可靠。du无论文件名中是否有任何特殊字符,都可以正常工作。


ste*_*ver 3

这有点取决于你所说的文件的意思

如果您想计算所有非隐藏项目(文件/目录/符号链接) - 与使用简单命令看到的相同ls- 您可以执行如下 shell 循环:

shopt -s nullglob
for d in */; do set -- "$d"/*; printf '%s\t%d\n' "$d" "$#"; done
Run Code Online (Sandbox Code Playgroud)

这使用*glob 来扩展每个目录中的项目列表,并使用setshell 内置函数将结果分配给 shell 的位置参数列表 - 其计数可在特殊变量中使用$#

如果您不希望输出中出现尾部斜杠,请将"$d"打印语句更改为"${d%/}". To pretty-print the results, pipe them throughcolumn -t`:

shopt -s nullglob
for d in */; do set -- "$d"/*; printf '%s\t%d\n' "${d%/}" "$#"; done | column -t
Run Code Online (Sandbox Code Playgroud)

您可以通过设置dotglobshell 选项来包含隐藏的项目。