考虑我在名为test
的文件夹中有很多shell脚本。我想执行除一个特定文件之外的所有文件。我该怎么办?手动重新定位文件或一个接一个地执行文件不是一个选项。有什么方法可以用单线做到这一点。或者,可以在sh path/to/test/*.sh
添加一些内容来执行所有文件?
答案 0 :(得分:4)
for file in test/*; do
[ "$file" != "test/do-not-run.sh" ] && sh "$file"
done
如果您使用bash
,则可以使用扩展模式跳过不需要的脚本:
shopt -s extglob
for file in test/!(do-not-run).sh; do
sh "$file"
done
答案 1 :(得分:1)
for FILE in `ls "$YOURPATH"` ; do
test "$FILE" != "do-not-run.sh" && sh "$YOURPATH/$FILE";
done
答案 2 :(得分:1)
find path/to/test -name "*.sh" \! -name $pattern_for_unwanted_scripts -exec {} \;
Find将以递归方式执行目录中以.sh(-name“* .sh”)结尾的所有条目,并且与不需要的模式(\!-name $ pattern_for_unwanted_scripts)不匹配。
答案 3 :(得分:0)
在bash
中,如果您执行shopt -s extglob
,则可以使用“扩展的globbing”,允许使用!(pattern-list)
来匹配除了某个给定模式之外的任何内容。
在你的情况下:
shopt -s extglob
for f in !(do-not-run.sh); do if [ "${f##*.}" == "sh" ]; then sh $f; fi; done