递归计算Linux中所有嵌套子目录中的文件

时间:2018-10-09 02:34:18

标签: linux recursion tree find

如何在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

目录名称中有空格和特殊字符

2 个答案:

答案 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