在bash中执行一组相应文件名的命令

时间:2014-07-09 14:48:34

标签: bash

我有一个包含大量配置文件的目录,它们看起来像这样:

us-sfo-building1.foo us-sfo-building1.bar mx-mex-building15.foo mx-mex-building15.bar

现在,我想执行一个脚本,它将us-sfo-building1.foo和us-sfo-building1.bar作为输入参数。

我基本上想要这个:./ script $ .foo $ .bar但我必须确保我总是有匹配的foo和bar对,否则脚本会抱怨。我尝试过这个,但它没有按预期工作:

#/bin/bash
for x in "*.foo*; do
 x=${x%.foo}
 if [ -e "$x.bar" ]; then
 ./script "$x.foo" "$x.bar"
 fi
done

有关如何解决这个或我的错误的想法?

1 个答案:

答案 0 :(得分:1)

for x in "*.foo*; do不需要"

<强>修正:

#/bin/bash
for x in *.foo; do
  x=${x%.foo}
  if [ -e "$x.bar" ]; then
    ./script "$x.foo" "$x.bar"
  fi
done

并提出建议(包括首选使用[[ ]]):

#/bin/bash
for x in *.foo; do
  y=${x%.foo}.bar
  [[ -e $y ]] && ./script "$x" "$y"
done