2017-05-09 79 views
1

我知道如何一次下载所有SFTP服务器的样本,并使用下面提到的脚本。下载文件的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)下载的所有文件一次的,我怎么可以下载小时间隔的文件。例如,在上面的脚本

download.sh的第一行(下载2017-05-05-00.zip)需要发生在7AM,这只是为了查找文件2017-05-05-00 .zip和其余的行不应该被抬头看。

download.sh的第二行(需要下载2017-05-05-01.zip)需要在8AM之前发生,直到第23个文件。

当其中一个执行时,不应查找其他文件。

不知道如何做到这一点使用bash cron作业,请问如何做到这一点的任何建议?

+0

是否要在其文件名中用'2017-05-05'下载** daily **文件? – Cyrus

+0

看看在不同的时间/天运行你的命令 –

+0

@Cyrus不,每天的日期都会改变。 SFTP服务器在一天的上午7点开始发布第一个文件(例如:对于2017-05-05,第一个文件以2017-05-05-00.zip的形式发布,上午7点),并且它将持续到第二天。即使在第二天(2017-05-06),上次文件名将为2017-05-05-23.zip(6AM),第二天的文件发布将在7AM开始(2017-05-06-00.zip) 。我知道,这是一个复杂的轮询策略,我需要拿出:( – Arun

回答

4

试试这个的cronjob与GNU日期:

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")/" 

通常有必要逃避%在一个cronjob一个\

+0

为了记录,等效命令将BSD日期为'date'+ \%Y - \%m - \%d - \%H '-v-7H' – ghoti