0

我正在尝试在 bash 脚本中使用 gdal。我有几个 ENVI 格式的输入光栅文件,位于不同的目录中,并且想要以 GTiff 格式提供新的输出名称。

然后的想法是在循环中运行代码,所以这只是一个初始测试,但不希望按预期工作。

这是我的抽象代码

#!/bin/bash

#Inputfiles a:
echo ${a[*]}
#/home/dir1/dir2/filename1 /home/dir1/dir4/filename2 /home/dir1/dir5/filename3

#outputnames b:
echo ${b[*]}
#outputname1 outputname2 outputname3


#this works, just to test
echo ${a[1]} ${b[1]} > file1.txt

#this works
gdal_translate –of GTiff /home/dir1/dir2/filename1 outputname1

#but this does not want to work? why?
gdal_translate –of GTiff ${a[1]} ${b[1]}

#error: Too many command options

下面的循环的一些初始代码,但上面的 1 元素测试还没有工作。

for i in ${a[*]}
do
   gdal_translate –of GTiff ${a[i]} ${b[i]}
done

有什么建议么?

4

2 回答 2

1

为了结束这个问题,这就是我所做的。我找到了解决这种情况的方法:

  1. 我所有的文件都在单独的文件夹中,所以我不得不将它们移动到一个公共文件夹中。这是循环文件的关键。
  2. 然后将所有 ENVI 文件转换为.tif我可以使用的文件

for filename in *.img;
do
    gdal_translate -of GTiff -a_nodata 0 $filename ../d_Separate_tif/$filename.tif
done

我现在就结束这个问题。

于 2013-07-16T17:04:58.113 回答
1

对于您的循环,您希望遍历数组的每个索引。代码for i in ${a[*]}遍历数组的每个元素。a这是您真正想要的:

for i in ${!a[@]}; do
    gdal_translate –of GTiff "${a[$i]}" "${b[$i]}"
done

这假设每个数组中的索引是相同的。请注意,我将${a[$i]}and${b[$i]}括在引号中,以便将带有空格的元素作为一个参数提供给命令。我认为这就是单个命令gdal_translate –of GTiff ${a[1]} ${b[1]}给出错误“命令选项太多”的原因。

于 2013-05-17T16:33:09.453 回答