考虑我在一个名为test
. 我想执行其中的所有文件,但一个特定文件除外。我该怎么办?手动重新定位文件或一个接一个地执行文件不是一种选择。有什么办法可以在单行中做到这一点。或者,添加一些东西来sh path/to/test/*.sh
执行所有文件?
问问题
192 次
4 回答
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
于 2012-08-31T12:20:07.587 回答
1
for FILE in `ls "$YOURPATH"` ; do
test "$FILE" != "do-not-run.sh" && sh "$YOURPATH/$FILE";
done
于 2012-08-31T12:11:47.857 回答
1
find path/to/test -name "*.sh" \! -name $pattern_for_unwanted_scripts -exec {} \;
Find 将递归执行目录中以 .sh (-name "*.sh") 结尾且不匹配不需要的模式 (\! -name $pattern_for_unwanted_scripts) 的所有条目。
于 2012-08-31T12:23:46.660 回答
0
在 中bash
,只要您这样做,shopt -s extglob
您就可以使用“扩展通配符”允许使用!(pattern-list)
除了给定模式之一之外的任何匹配项。
在你的情况下:
shopt -s extglob
for f in !(do-not-run.sh); do if [ "${f##*.}" == "sh" ]; then sh $f; fi; done
于 2012-08-31T12:26:39.523 回答