从命令行计算多个子目录中的文件数量
问题出现的原因是使用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循环可以更好地解决在多个子目录中计算文件数量的问题。