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 个文件,等等
我确定这是基本的东西,但我找不到好的答案......
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
无论文件名中是否有任何特殊字符,都可以正常工作。
这有点取决于你所说的文件的意思
如果您想计算所有非隐藏项目(文件/目录/符号链接) - 与使用简单命令看到的相同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 来扩展每个目录中的项目列表,并使用set
shell 内置函数将结果分配给 shell 的位置参数列表 - 其计数可在特殊变量中使用$#
如果您不希望输出中出现尾部斜杠,请将"$d"
打印语句更改为"${d%/}". To pretty-print the results, pipe them through
column -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)
您可以通过设置dotglob
shell 选项来包含隐藏的项目。