如何在Linux系统的子目录中递归计算文件数量。我知道
tree
ncdu
这些命令具有非常好的信息输出,但不会编译文件。我试图
find . -type d -print0 | xargs -0 {HERE I SHOULD DO SOMETHING}
但是失败。这样的输出:
00. Introduction: 6
04. Topic 1: 18
01. Topic 2: 14
02. Topic 3: 10
05. Details 4: 4
03. Conclusion: 6
目录名称中有空格和特殊字符
答案 0 :(得分:1)
如果您只想计算文件数,可以使用:
find . -type f | wc -l
答案 1 :(得分:0)
经过研究和测试,我得到了
find . -maxdepth 1 -type d -print0 | sort -z | \
while IFS= read -r -d '' i ; do \
echo -n "$i: " ; (find "$i" -type f | wc -l) ; done
-maxdepth 1
-我只需要一级递归
-type d
-仅目录
-print0 | while IFS= read -r -d '' i
-我的目录中有空格。 -r
的{{1}}选项可防止反斜杠解释(通常用作反斜杠换行符,以继续在多行上转义或转义分隔符)。如果没有此选项,则输入中任何未转义的反斜杠将被丢弃。您几乎应该始终将read
选项与-r
一起使用。
此规则的最常见例外是使用read
时,它使用-e
从交互式shell获取行。在这种情况下,制表符补全会将反斜杠添加到转义符等中,并且您不希望它们实际包含在变量中。但是,当逐行读取任何内容时,将永远不会使用此方法,并且在这样做时应始终使用Readline
。
默认情况下,-r
通过删除所有前导和尾随空格字符(如果在read
中存在空格和制表符)来修改读取的每一行。如果不希望这样,可以像上面的示例一样清除IFS
变量。
IFS变量在shell(Bourne,POSIX,ksh,bash)中用作输入字段分隔符(或内部字段分隔符)。本质上,它是一串特殊字符,当分割输入行时,它们将被视为单词/字段之间的分隔符。
IFS
的默认值为空格,制表符,换行符。 (一个三个字符的字符串。)如果未设置IFS
,则其作用就好像它被设置为该默认值一样。 (这可能是为了简化操作,在不支持特殊字符$'...'语法的shell中。)如果IFS
设置为空字符串(与取消设置非常不同!),则不进行拆分将执行。
在read命令中,如果指定了多个变量名参数,则IFS
用于拆分输入行,以便每个变量都获得输入的单个字段。 (如果字段多于变量,则最后一个变量将获取所有其余字段。)
IFS
-按字母顺序对查找结果进行排序
sort -z
-打印目录名称和冒号
do echo -n "$i: "
-仅在每个目录中查找文件
find "$i" -type f
-显示文件数(第二行wc -l
输出)
find
使用上面的一线解释:
~/tmp$ tree
.
├── 1000
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_56c7fa8bb58cca0055b0efc2c5ad303d.jpg
│ ├── 138x116_cropped_c00f5791305b20d52e16e0f7a4c2e3d9.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ └── original_thumb.jpg
├── 10000
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10001
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10005
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10006
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10009
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 1001
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_56c7fa8bb58cca0055b0efc2c5ad303d.jpg
│ ├── 138x116_cropped_c00f5791305b20d52e16e0f7a4c2e3d9.jpg
│ └── original_thumb.jpg
├── 10011
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10015
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10016
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ ├── 640x320_cropped_d4dcbfaafb98dafcbc594b020ce7c54b.jpg
│ └── original_thumb.jpg
├── 10017
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10018
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10019
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ ├── 640x320_cropped_d4dcbfaafb98dafcbc594b020ce7c54b.jpg
│ └── original_thumb.jpg
├── 1002
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_56c7fa8bb58cca0055b0efc2c5ad303d.jpg
│ ├── 138x116_cropped_c00f5791305b20d52e16e0f7a4c2e3d9.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ └── original_thumb.jpg
├── 10021
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10025
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 640x320_cropped_6450e078c12f532b29ba57eeb58ca8b3.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10028
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
├── 10029
│ ├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
│ ├── 138x116_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_6c8e104b1fc8e31695beb9e950830d64.jpg
│ ├── 640x320_cropped_8ae863ac89a31bf9834085414215be36.jpg
│ └── original_thumb.jpg
└── 1003
├── 138x116_cropped_50198398faa3c0d168c176824edd4ff7.jpg
├── 138x116_cropped_56c7fa8bb58cca0055b0efc2c5ad303d.jpg
├── 138x116_cropped_c00f5791305b20d52e16e0f7a4c2e3d9.jpg
├── 640x320_cropped_50198398faa3c0d168c176824edd4ff7.jpg
└── original_thumb.jpg
19 directories, 89 files