命令行:使用通配符时忽略特定文件

时间:2012-08-31 12:07:29

标签: shell command-line terminal

考虑我在名为test的文件夹中有很多shell脚本。我想执行除一个特定文件之外的所有文件。我该怎么办?手动重新定位文件或一个接一个地执行文件不是一个选项。有什么方法可以用单线做到这一点。或者,可以在sh path/to/test/*.sh添加一些内容来执行所有文件?

4 个答案:

答案 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