如何使用bash脚本遍历文件夹/目录?

时间:2018-11-10 16:21:53

标签: bash shell

我正在尝试计算文件夹中的所有.txt文件,问题是主文件夹有多个文件夹,并且在每个人的内部都有txt文件,因此总的来说,我想计算txt文件。到现在为止,我一直在尝试构建这样的解决方案,但是当然这是错误的:

 #!/bin/bash
  counter=0
  for i in $(ls /Da) ; do
   for j in $(ls i) ; do
    $counter=$counter+1
 done
 done 
  echo $counter

我遇到的错误是:ls无法访问我...

问题在于我不知道如何构建内部for循环,因为它取决于外部for循环(模式)?

3 个答案:

答案 0 :(得分:2)

这可以为您服务

find . -name "*.txt" | wc -l

在第一部分find从此文件夹(*.txt)及其子文件夹中查找.。在第二部分wc中计算-l的返回行(find)。

答案 1 :(得分:1)

您要避免使用parsing ls,而您要quote your variables

也不需要重复循环。

printf 'x\n' /Da/* /Da/*/* | wc -l

还取决于您是否希望/Da中的条目是所有文件(在这种情况下/Da/*就足够了),所有目录(在这种情况下仅/Da/*/*就足够了),或两者。此外,如果您根本不想统计目录,则可以切换到find /Da -type f -printf 'x\n'或类似名称。

根本不需要打印文件名;如果文件名应包含换行符(touch $'/Da/ick\npoo'才能看到实际效果),这样可以避免得到错误的结果。

更一般地,正确的嵌套循环看起来像

for i in list of things; do
    for j in different items, perhaps involving "$i"; do
        things with "$j" and perhaps also "$i"
    done
done

答案 2 :(得分:-1)

i是一个变量,因此您需要通过$引用它,即第二个循环应该是

for j in $(ls "$i") ; do