0

我安装了一个名为 Gdal 的库,它运行某些 GIS 命令。

此命令针对单个文件运行

gdal_translate -a_srs EPSG:25832 INPUT_FILE OUTPUT_FILE

但我想运行一个批处理命令,它遍历所有 *.tif 文件,所以我不必写每个文件的名称(我有 1300 个文件!)

我在 .sh 文件中尝试过这个......但它没有用

#!/bin/bash

for FILE in *.tif
do
  BASE=$FILE .tif
  NEWFILE=test/${BASE}.tif
  gdal_translate -s_srs EPSG:25832 $FILE $NEWFILE
done

谁能告诉我如何做到这一点?

你的,

罗伯特

4

2 回答 2

1

$FILE 包括.tif扩展名。也BASE=$FILE .tif不会按照您的想法执行(它.tif在命令期间将 $BASE 设置为 $FILE 执行)。

-a_srs你也有和之间的区别-s_srs。我不知道你是什么意思。

我认为最终结果是您想test/$FILE用作输出文件名。

#!/bin/bash

for FILE in *.tif; do
  gdal_translate -s_srs EPSG:25832 "$FILE" "test/$FILE"
done

(引号使它与包含空格的路径一起使用。将foranddo放在同一行是一种常用的编写方式以节省空间。)

于 2012-01-30T11:27:34.663 回答
0

您的 FILE 变量末尾已经有 .tif ,因此您要再次附加 .tif 。试试这个:

#!/bin/bash

for FILE in *.tif 
do 
  NEWFILE=test/${FILE}
  gdal_translate -s_srs EPSG:25832 $FILE $NEWFILE
done
于 2012-01-30T11:25:31.757 回答