从命令行计算多个子目录中的文件数量

15 浏览
0 Comments

从命令行计算多个子目录中的文件数量

我有一个包含大量子目录的目录。每个子目录的名称都类似于"treedir_xxx",其中xxx是一个数字。我想运行一个命令(最好是从命令行,因为我对批处理脚本没有经验),来统计每个名为'treedir_xxx'的子目录中的文件数量,并将这些数字写入一个文本文件。我觉得这应该不是很难,但到目前为止我一直没有成功。

我尝试过诸如find *treedir* -maxdepth 1 -type f | wc -l这样的方法,但这只返回了所有文件的总数,而不是每个单独文件夹中的文件数。

0
0 Comments

问题出现的原因是使用find命令时遇到了一些困难,需要在多个子目录中计算文件数量。解决方法是使用for循环来代替find命令。具体的解决方法是在终端中使用以下命令:

for i in treedir_*; do ls "$i" | wc -l; done

这个命令假设你使用的是bash或类似的shell,因为这是大多数现代Linux发行版上最常见的shell。

上述命令会输出多个子目录中文件的数量。例如,给定以下目录结构:

treedir_001

|__ a

|__ b

|__ c

treedir_002

|__ d

|__ e

treedir_003

|__ f

运行上述命令将输出:

3

2

1

如果你想在数字周围打印其他内容,可以使用以下命令:

for i in treedir_*; do echo $i: $(ls "$i" | wc -l); done

这将输出:

treedir_001: 3

treedir_002: 2

treedir_003: 1

这里使用了$(...)来将命令的输出作为字符串并传递给echo命令,然后echo命令可以将所有内容打印在一行上。

如果你想在循环中使用多个命令,可以使用以下命令:

for i in treedir_*; do echo $i; ls "$i" | wc -l; done

这将输出:

treedir_001

3

treedir_002

2

treedir_003

1

for循环可以像其他命令一样重定向到文件或管道中。因此,你可以使用以下命令将结果写入文件:

for i in treedir_*; do ls "$i" | wc -l; done > list.txt

或者更好的是使用以下命令:

for i in treedir_*; do ls "$i" | wc -l; done | tee list.txt

第二个版本将输出发送到tee程序,tee程序将其打印到标准输出并将其重定向到文件。这对于调试而言比简单的重定向更好。

总结而言,虽然find命令很强大,但并不是所有问题都适合使用它。使用for循环可以更好地解决在多个子目录中计算文件数量的问题。

0