我有一个bash脚本,我想在一个目录中运行一个程序,使用另一个目录中的文件作为输入
有几个输入文件,位于几个不同的目录中,每个目录都用作程序一次迭代的输入
这些文件是每个目录中的几个文件类型(.foo)
我的代码是
cd /path/to/data/
for D in *; do
# command 1
if [ -d "$D" ]
then
cd /path/to/data
# command 2
for i in *.foo
do
# command 3
done
fi
done
当我运行脚本时,输出如下
# command 1 output
# command 2 output
# command 3 output
# command 2 output
# command 2 output
# command 2 output
# command 2 output
# command 2 output
.
.
.
因此脚本完成了我期望它完成一次的操作,然后似乎没有在最后的for循环之后迭代
为什么会这样?
答案 0 :(得分:0)
我认为你在“那么”之后有一个拼写错误... 更有意义的是:
then
cd /path/to/data/$D
# command 2
但正如cdarke建议的那样,最好避免在脚本中使用cd。 你可以得到相同的结果:
for D in /path/to/data; do
# command 1
if [ -d "$D" ]
then
# command 2
for i in /path/to/data/$D/*.foo
do
# command 3
done
fi
done
或者您甚至可以使用find并避免使用if部分(代码越少,脚本越快):
for D in $(find /path/to/data -maxdepth 1 -type d)
# -type d in find get's only directories
# -maxdepth 1 means current dir. If you remove maxdepth option all subdirs will be found.
# OR you can increase -maxdepth value to control how deep you want to search inside sub directories.