2012-01-31 14 views
1

私は通常、次のコマンド用のスクリプトを書いていますが、今回は一度だけ使用したいので、コマンドラインに書きたいと思います。dirのすべてのファイルを反復処理するスクリプトをコマンドラインで書くことはできますか?

スクリプトは、ディレクトリ内のすべてのファイルを処理します。

for FILE in *.tif  # grab all the tif files 
do 
    NEWFILE=test/${FILE} # create the new file name 
    gdal_translate -a_srs EPSG:25832 $FILE $NEWFILE 
done 

申し訳ありません...私は私がしようとしなかったことを言及するのを忘れてしまった "*。TIF DO NEWFILE =テスト_ $ {FILE} gdal_translateにFILEのため が行われ、50%、50%の%のファイル%NEWFILEを-outsize"。しかし、それは次の行で>と凍結します...他の何かを待っているかのように。

+0

凍っていないので、コマンドを完了するのを待っています。問題は、コマンド区切り文字を省略したことです。 – tripleee

答えて

0

対話型コマンドとスクリプトには基本的に違いはありません。コマンドを1行に入れたい場合は、改行の代わりにセミコロンで区切ります。

for f in *.tif; do gdal_translate -a_srs EPSG:25832 $f test/$f; done 

二次プロンプトは、コマンドがまだ完了していない場合は、引用符で囲まれた文字列または複合コマンドの途中である場合など、シェルで表示、または前の行は、バックスラッシュで終了した場合です。

+0

すごい!...あなたの助けをありがとう!私はdoを削除しました。それは働いた! –

+0

はい、ループの本体が単一のコマンドである場合、 'do'はオプションです。 – tripleee

0

スクリプト行の間にセミコロンが必要です。試してみてください。

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

私は-bash:予期しないトークン '; 'の近くで構文エラーを受け取りました。私はLinux Ubuntuを使っていると言いませんでした。 –

+0

' do'の後のセミコロンは余分で間違っています。 – tripleee

+0

@Robert Buckley私は私のシステムで同様のテストを試みるときはいつでも、 'do'の後にセミコロンは必要ありません。答えに固定 –