【问题标题】:run a script in multiple folders in bash在 bash 的多个文件夹中运行脚本
【发布时间】:2017-03-08 17:07:41
【问题描述】:

我有一个 Cabo_Verde 文件夹,在这个文件夹中我有几个文件夹(001 到 300),每个文件夹有几个文件,如下所示:

文件名:Cabo_verde

     001
     2008.001.00.00.CVBR1.LHZ.SAC
     2008.001.00.00.CVBR2.LHZ.SAC
     ...

     002
     2008.002.00.00.CVBR1.LHZ.SAC
     2008.002.00.00.CVBR2.LHZ.SAC
     ...

我想在每个文件夹中运行一个脚本,这就是我所做的:

for dir in `ls $Cabo_verde`;
do
   for subdir in `ls $Cabo_Verde/$dir`;
   do
      $(for file in *SAC; do
sac <<EOF
echo on
read $file
chnhdr KCMPNM LHZ
write over
quit
EOF
done)
done;
done

最后我得到了

ls:cannot access /001: No such file or directory
ls:cannot access /002: No such file or directory

谁能帮帮我?

谢谢

【问题讨论】:

  • 你展示的是你做了什么,而不是你得到了什么。请附上结果和问题描述。
  • $Cabo_Verde 不是$Cabo_verde

标签: bash scripting directory


【解决方案1】:

作为可靠性帮助,我建议使用set -u 编写和运行所有脚本,您的参数名称拼写错误会立即显而易见。

你说你想在每个目录中运行一个脚本,但这是真的吗?反正...

你可以像这样嵌套两个循环:

for d in Cabo_Verde/*/; do
  cd $d
  for f in *.SAC; do
    sac ... $f
  done
done

或者你可以像这样用一个循环来做到这一点:

for f in Cabo_Verde/*/*.SAC; do
  cd ${f%/*}
  sac ... $f
done

当然,您根本不需要任何循环:

find Cabo_Verde -name \*.SAC -execdir tool

其中tool 是一个包含sac ... &lt; $1 的脚本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2017-12-12
    • 2018-01-06
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多