【发布时间】:2015-02-03 19:52:48
【问题描述】:
设置:
包含一年中每一天的目录的数据目录。即数据/2014-01-01/ 到 2014-12-31。我有一个 perl 脚本,我在每个日期目录中单独运行。
我正在尝试运行一个 shell 脚本来从数据中运行,并从 2014-02-15 到 2014-07-20 遍历每个目录,并在每个目录中运行 perl 脚本。 perl 脚本运行大约需要 20 秒。这是我到目前为止所拥有的,它只会在 2 月份运行,并且不会等待 perl 脚本完成。我希望它在该范围内的每个目录上运行,并等待循环内的 perl 脚本完成,然后再重新循环。
#!/bin/bash
folders=`find 2014-02*`
for folder in $folders; do
cd $folder
perl C:/Tools/script.pl
cd ..
done
【问题讨论】:
-
为什么不将遍历的文件夹添加到perl脚本而不是单独的shell脚本?每个文件夹的 perl 脚本是否有本质上的不同?
-
1 不要像这样迭代
find结果,请参阅this answer。 2 如果您之前cded 比一个目录更深,cd ..不会带您返回。 -
find data/ -type d -name '2014-0[2-7]-(1[5-9]|20)' -exec C:/Tools/script.pl {} \;我相信上面的命令会起作用(没有测试),但是构建一个可以采用任意起点和终点并应用您想要的任何逻辑的脚本似乎更合理。因为您可能不得不再次这样做。 -
@Biffen 感谢您提供的信息,但您有什么解决方案吗?
-
@Hunter 我会试试这个。这会等待 perl 脚本在每次迭代中完成吗?是的,我希望在脚本中实现它以便稍后再次运行。
标签: perl shell loops directory