1

標準化された名前 (file1pop.zip、...、filenpop.zip) の一連の圧縮ファイルがあります。これらの各ファイル内に、i={1,n} の対象の popdnamei.asc ファイルがあります。これらのファイルに対して 2 つのコマンドを実行したいと考えています (その中で、asc ファイルを tif に変換します)。ただし、bash スクリプトを機能させることができません。bashで文字列を切り刻む方法を正しく理解していないと思います。誰かが私の間違いを知っていますか?

################### 
##  Choose path
###################
cd 
cd path/to/my/directory/with/zipfiles

###################
##  Unzip, convert to tif and project (WGS84)
###################

for x in *pop.zip
do
echo $x
files=${x%%.*}  #with this I hope to target the base name "filei", i={1,n} without the ".zip" extension
mkdir $files
    unzip -d $files  $x
y=popd*.asc  
if [ -f $files/$y ]  #with this I want to run my commands only if the file popdnamei.asc does exist in the file
then
        newy=${y%%.*}   #extract "popdnamei" without ".asc" extension
        gdal_translate $files/$y $files/$newy.tif  #command 1
        gdalwarp -s_srs "WGS84" -t_srs "WGS84" $files/$newy.tif $files/$newy_PROJ.tif  #command 2
        cp $files/$newy_PROJ.tif ../Output_Storage/ 
fi
rm -rf $files
done    

variable に問題があると思います$y。プログラムの実行中に確認したところ、出力ファイルnewypopd*.tifの名前は、「完成した」名前 ( popdnamei.tif) ではなく、文字どおりアスタリスクが付いた「 」になっています。さらに、Output_Storage ディレクトリにファイルが書き込まれません。アスタリスクで定義された変数を切り詰めて補完するのに問題があると思いますが、それが何であるかを完全には理解していません。誰か助けてくれませんか?ありがとうございました。

4

1 に答える 1

2

問題は発言にある

 y=pop*.asc

bash ファイル名展開機能は、指定されたファイル名パターンに一致するものを見つけようとします。一致するものが見つからない場合、提供されたパターンが変数に割り当てられます。あなたの場合、解凍された pop*.asc ファイルはサブフォルダー $files 内にあるため、一致するものが見つからず、パターン自体が変数 'y' に割り当てられます。

解凍されたファイルを反復処理する別の内部ループを用意することをお勧めします。

for y in $files/pop*.asc; 
do
        if [ -f $y ]
        then 
            newy=${y%%.*}   #extract "popdnamei" without ".asc" extension
            gdal_translate $y $newy.tif  #command 1
            gdalwarp -s_srs "WGS84" -t_srs "WGS84" $newy.tif $newy_PROJ.tif  #command 2
            cp $newy_PROJ.tif ../Output_Storage/ 
        fi
done
于 2013-11-26T16:44:27.823 に答える