我正在尝试使用一个简单的bash脚本在一组文件夹中的每个文件中执行某些操作。另外,我喜欢计算脚本读取的文件数量,但是当脚本通过循环时,数值变量将被重置。
我正在使用的代码就是那个
#!/bin/bash
let AUX=0
find . -type "f" -name "*.mp3" | while read FILE; do
### DO SOMETHING with $FILE###
let AUX=AUX+1
echo $AUX
done
echo $AUX
我可以看到AUX在循环内部计数,但最后一个“echo”打印出0,变量似乎真的被重置了。我的控制台输出就像那样
...
$ 865
$ 866
$ 867
$ 868
$ 0
我想在AUX中保存已经过的文件数量。有什么想法吗?
答案 0 :(得分:3)
不要使用管道,它会创建一个子壳。示例如下。
#!/bin/bash
declare -i AUX=0
while IFS='' read -r -d '' file; do
### DO SOMETHING with $file###
(( ++AUX ))
echo $AUX
done < <(find . -type "f" -name "*.mp3")
echo $AUX
答案 1 :(得分:0)
如果您有bash
4.0或更高版本,请使用globstar
选项代替find
:
shopt -s globstar
aux=0
for f in **/*.mp3; do
# Just in case there is a directory name ending in '.mp3'
[[ -f $f ]] || continue
# Do something with $f
echo "$(( ++aux ))"
done