Как написать пакетную команду в Linux Ubuntu 10.04? - PullRequest
0 голосов
/ 30 января 2012

У меня установлена ​​библиотека под названием Gdal, которая выполняет определенные команды ГИС.

Эта команда запускается для одного файла

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

Может кто-нибудь показать мне, как это сделать?

Ваш,

Роберт

Ответы [ 2 ]

1 голос
/ 30 января 2012

$ 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

(Кавычки делают этоработать с путем с пробелами в нем. Помещение for и do в одну строку является обычным способом записи его для экономии места.)

0 голосов
/ 30 января 2012

Ваша переменная FILE уже имеет .tif в конце, поэтому вы добавляете .tif снова.Попробуйте вместо этого:

#!/bin/bash

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