作为用于计数任何已接收目录中项目的脚本的一部分,我还需要递归检查任何子目录。 为此,我需要扩展给定的参数并向其添加子目录的路径,例如:对于具有子目录sub1和sub2的/ path / dir1,我需要将参数编辑为/ path / dir1 / sub1和/ path / dir1 / sub2并在其上运行脚本。 我尝试了不同的方法,但无法正确完成。
在for循环中,我尝试将子目录添加到给定的路径,但是它似乎对我不起作用。
代码:
#!/bin/bash
dir=$1
count=0
a="$(source script1.sh)"
((count=count+a+1))
b="$(source script2.sh)"
c="$(wc -w <<< "$b")"
i=0
for i in {1.."$c"}
do
d="$(cut -f"$i" -d" " <<< "$b")"
echo "$d"
(( i += 1 ))
done
echo "$count"
答案 0 :(得分:0)
您的原始代码有一些问题:
i
添加到count
wc
和for
和cut
是一种复杂的访问目录名称列表的方法这是一个简单的递归函数,它使用bash内置函数来避免调出外部程序:
#!/bin/bash
countdir()(
declare -i n=0
if cd "$1" 1>&2; then
shopt -s dotglob nullglob
for f in *; do
if [ -d "$f" ]; then
n+=$(countdir "$f") # recurse!
fi
n+=1
done
else
printf 1>&2 "Access error, ignoring directory: %s\n" "$1"
fi
echo $n
)
countdir "$1"
f()()
而不是更常见的f(){}
,因此shopt
和cd
是临时的declare -i
定位$n
并允许直接执行算术cd ""
是无操作)