2017-05-09 2 views
1

SFTPサーバーからすべてのサンプルを一度にダウンロードし、下記のスクリプトを使用する方法を知っています。代わりに、一度にすべてのファイルをダウンロードするためのスクリプト(download.sh)を実行しているのファイルをダウンロードするためのbash cronjobの問題

#download.sh 
sshpass -p password sftp [email protected]:/Files/2017-05-05-00.zip ~/local_machine/2017-05-05/ 
sshpass -p password sftp [email protected]:/Files/2017-05-05-01.zip ~/local_machine/2017-05-05/ 
sshpass -p password sftp [email protected]:/Files/2017-05-05-02.zip ~/local_machine/2017-05-05/ 
................................................................. 
sshpass -p password sftp [email protected]:/Files/2017-05-05-23.zip ~/local_machine/2017-05-05 

は、どのように私は時間単位の間隔上のファイルをダウンロードすることができます。たとえば、上記のスクリプトの場合

download.sh(2017-05-05-00.zipのダウンロード)の最初の行は、7AMで発生する必要があります。これは、ファイルルックアップ2017-05-05-00 .zipと残りの行を参照しないでください。

download.shの2行目(2017-05-05-01.zipのダウンロード)は、8AMと23番目のファイルまででなければなりません。

実行中に他のファイルが見つからないようにしてください。

bash cronジョブを使用してこれを行う方法がわかりません。どうすればよいですか?

+0

ファイル名に '2017-05-05'の**毎日の**ファイルをダウンロードしますか? – Cyrus

+0

atを使って異なる時刻/日にコマンドを実行する –

+0

@Cyrusいいえ、毎日、日付が変更されます。 SFTPサーバーは、1日の午前7時に最初のファイルをポストし始めます(例:2017-05-05の場合、最初のファイルは午前7時に2017-05-05-00.zipとなります)、翌日に続きます。次の日(2017-05-06)であっても、最終ファイル名は2017-05-05-23.zip(6AM)になり、翌日のファイル投稿は午前7時に開始されます(2017-05-06-00.zip)。 。私は知っている、これは私が思い付く必要がある複雑なポーリング戦略です:( – Arun

答えて

4

はGNU日付で、このcronジョブを試してください:

0 * * * * sshpass -p password sftp [email protected]:/Files/$(date +"\%Y-\%m-\%d-\%H" -d "-7 hours").zip $HOME/local_machine/$(date +"\%Y-\%m-\%d" -d "-7 hours")/" 

は、通常はcronジョブで\%をエスケープする必要があります。

+0

レコードの場合、同等のコマンドは 'date '+ \%Y - \%m - \%d - \%Hとなります'-v-7H' – ghoti

関連する問題