2016-09-16 9 views
1

私は現在、FTPサーバーにログインして毎日ファイルをダウンロードするという仕事をしているbashスクリプトを持っています。ファイル名の一部は1日(DOY)です。だから私は現在の日付を取得し、%jオプションを使用してDOYを取得します。ここに私のコードのスニペットがあります:年を取得し、ファイル名の一部としてDOYを使用してファイルをダウンロードする

doy=$(date +%j) 
mget filename_$doy* 

このスクリプトを実行すると、それは現在のDOYのファイルだけでなく、それらのファイルもすべて取得されます。だから今日はDOY 260なら0から260までのすべてのファイルを取得します。私はちょうど260を望みます。私のbashスクリプトの残りの部分は、次のWebサイトのモックアップです:Automatic/periodic FTP download using cron jobs。私は間違って何をしていますか?

EDIT:@rednebあたりの全スクリプトの要求

#!/bin/bash 
HOST='ftp.server' # change the ipaddress accordingly 
USER='user' # username also change 
PASSWD='pass' # password also change 
ftp -inv $HOST<<EOF 
quote USER $USER 
quote PASS $PASSWD 
bin 
cd /filedirectory/ 
doy=$(date +%j) 
mget filename_$doy* 
bye 
EOF 

EDIT 2:@Cyrus「答えは働きました。他の誰かが助けを必要とする場合に備えて、私の最後の作業スクリプトです。 FTPサーバーにログインする前に、bashコマンドを入力する必要があります。ありがとう!

#!/bin/bash 
HOST='ftp.server' # change the ipaddress accordingly 
USER='user' # username also change 
PASSWD='pass' # password also change 
doy=$(date +%j) 
ftp -inv $HOST<<EOF 
quote USER $USER 
quote PASS $PASSWD 
bin 
cd /filedirectory/ 
mget filename_$doy* 
bye 
EOF 
+3

前に移動ラインに

doy=$(date +%j) 

'mget filename_ *'と同じです(つまり、 '$ doy'は空の文字列として扱われます)。 'mget'行の前に' echo $ doy'を追加することでこの理論をテストできます。 – redneb

+0

Hmmm、はい私は 'echo $ doy'と' printf $ doy'の両方を試しましたが、何も出力しませんでした。 '$ doy'が' mget'になったらまだ設定されていない場合、どのように修正できますか?コメントありがとう。 – Stratix

+0

あなたのお手伝いをするために、スクリプト全体を投稿する必要があります。 – redneb

答えて

1

一つの可能​​性は `mget`行が実行されたときの$ doy`が設定されていないので、その行になる`ということである

ftp -inv $HOST<<EOF 
+0

あなたはこれを投稿する前に、この権利を考えました。私はそれを試みたが、うまくいかなかった。それは私がbashコマンドを認識しないFTPサーバーにログインしたら、おそらくそれは意味がありますか? – Stratix

+0

これは実際に働いた!私は私の変更を反映するために元の投稿を編集しました。 – Stratix

+1

はい、ファイル転送プロトコルは変数割り当てを処理できません。 – Cyrus

関連する問題