1

考虑我在一个名为test. 我想执行其中的所有文件,但一个特定文件除外。我该怎么办?手动重新定位文件或一个接一个地执行文件不是一种选择。有什么办法可以在单行中做到这一点。或者,添加一些东西来sh path/to/test/*.sh执行所有文件?

4

4 回答 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 回答