我是脚本新手,我正在尝试创建一个脚本来计算当前目录的每个文件夹(和子文件夹)中的文件。
这个脚本似乎运行正常:
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"
不确定我的命令替换是否正确,并希望有人指出我正确的方向!感谢
答案 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"