变量以保持for循环中的运行计数并在结束时打印总计

时间:2017-06-24 12:33:24

标签: linux bash terminal

我是脚本新手,我正在尝试创建一个脚本来计算当前目录的每个文件夹(和子文件夹)中的文件。

这个脚本似乎运行正常:

for dir in $( ls -pa | grep / | tail -n +3 ); do 
    echo "${dir%/}: $( find ${dir} -type f | wc -l )"
done

但是,我想在for循环之后打印文件总数,而不会低效地使用find命令来计算总数。

我尝试了一些没有成功的事情。

for dir in $( ls -pa | grep / | tail -n +3 ); do 
     echo "${dir%/}: `count=`$( find ${dir} -type f | wc -l )" 
     total=$((total+count))
done 

echo "total: $total"

不确定我的命令替换是否正确,并希望有人指出我正确的方向!感谢

2 个答案:

答案 0 :(得分:0)

要计算当前文件夹(不包含任何文件)中每个直接子文件夹中的文件数(具有递归性),并计算文件总数而不使用find . -type f | wc -l重新计算所有文件:

#!/usr/bin/env bash

total=0
for dir in $(find . -maxdepth 1 -type d -printf '%f\n' | sed 1d); do
     echo "${dir}/: $(find ${dir} -type f | wc -l)"
     total=$((total + count))
done

echo "total: ${total}"

答案 1 :(得分:-1)

您的代码有什么问题,count变量未正确设置。

echo "${dir%/}: `count=`$( find ${dir} -type f | wc -l )"

在该行中,count=是命令替换,不会产生任何结果。因此,count不会被设置,因为没有赋值语句,而是命令替换和另一个命令替换。 所以这是解决方案:

for dir in $( ls -pa | grep / | tail -n +3 ); do count=$( find ${dir} -type f | wc -l ); echo "${dir%/}: $count"; total=$((total+count)); done; echo "total: $total"