运行文件夹中的所有shell脚本

时间:2016-12-10 18:57:21

标签: linux bash shell

我在一个文件夹中有很多.sh个脚本,并希望一个接一个地运行它们。单个脚本可以执行为:

bash wget-some_long_number.sh -H

假设我的目录是/dat/dat1/files

如何一个接一个地运行bash wget-some_long_number.sh -H

我理解这些内容应该有效:

for i in *.sh;...do ....; done

3 个答案:

答案 0 :(得分:15)

使用此:

for f in *.sh; do  # or wget-*.sh instead of *.sh
  bash "$f" -H 
done

如果要在脚本失败时停止整个执行:

for f in *.sh; do
  bash "$f" -H || break  # execute successfully or break
  # Or more explicitly: if this execution fails, then stop the `for`:
  # if ! bash "$f" -H; then break; fi
done

您想要投放,例如x1.shx2.sh,...,x10.sh

for i in `seq 1 10`; do
  bash "x$i.sh" -H 
done

答案 1 :(得分:15)

有一种更简单的方法,您可以使用run-parts命令执行该文件夹中的所有脚本:

run-parts /path/to/folder

答案 2 :(得分:1)

我遇到了这个问题,我无法使用循环和run-parts与cron协同工作。

答案:

foo () {
    bash -H $1 
    #echo $1
    #cat $1
}
cd /dat/dat1/files #change directory
export -f foo #export foo
parallel foo ::: *.sh #equivalent to putting a & in between each script

你使用GNU parallel,这会执行目录中的所有内容,增加的buff会以更快的速度发生。更不用说它不仅仅是脚本执行,你可以在函数中放置任何命令,它都可以工作。