我有以下示例的目录结构:
/test_dir/d
/test_dir/d/cron
/test_dir/d/cache
/test_dir/d/...(more sub dirs)
/test_dir/tree
/test_dir/tree/a
/test_dir/tree/a/a1
/test_dir/tree/a/a2
...(and so on for b/ and c/ )
我写了下面这个 bash 脚本,它可以有效地进入到 /test_dir
的第二级目录,以便可以到达 /test_dir/d/cron
或 /test_dir/tree/a
,但不会进一步前往。我无法弄清楚为什么递归脚本不能继续前进,可以有人帮忙调试脚本并指出我的错误吗?
这是我编写的内容:
#!/bin/bash
#script to recursively travel a dir of n levels
function traverse() {
for file in `ls $1`
do
#current=${1}{$file}
if [ ! -d ${1}${file} ] ; then
echo " ${1}${file} is a file"
else
#echo "entering recursion with: ${1}${file}"
traverse "${1}/${file}"
fi
done
}
function main() {
traverse $1
}
main $1
这是输出结果:
/test_dir/a is a file
/test_dir/b is a file
/test_dir//dcache is a file
/test_dir//dcron is a file
/test_dir//dgames is a file
/test_dir//dlib is a file
/test_dir//dlog is a file
/test_dir//drun is a file
/test_dir//dtmp is a file
/test_dir/movies is a file
/test_dir//treea is a file
/test_dir//treeb is a file
/test_dir//treec is a file
/test_dir//treed is a file
我知道可能有更优雅的一行命令来完成这个任务。但我尝试以这种明确的方式来完成。对于这篇文章的长度,我感到抱歉。
编辑:使用traverse "${1}/${file}"