读取文件列表,然后通过FTP发送这些文件

时间:2017-06-06 07:42:06

标签: bash ftp ftp-client grads

我正在使用Grads脚本语言制作天气模型图表,我正在使用bash脚本,因此我可以使用while循环下载模型数据(以grib2格式)并为模型运行中的每个帧调用grads脚本。现在,我有一个循环,遍历给定预测小时的所有脚本,并通过FTP上传图像输出。完成此for循环后,将下载下一小时的grib2数据,然后循环再次运行。

for ((i=0;i<${#SCRIPTS[@]};i++)); do
    #define filename
    FILENAME="${FILENAMES[i]}${FORECASTHOUR}hrfcst.png" 
    #run grads script
    /home/mint/opengrads/Contents/opengrads -lbc "run /home/mint/opengrads/Contents/plotscripts/${SCRIPTS[i]} $CTLFILE $INIT_STRINGDATE $INIT_INTDATE $INITHOUR $FILENAME $h $MODEL $MODELFORTITLE 500"
    #run ftp script
    #sh /home/mint/opengrads/Contents/bashscripts/ftpsample.sh $INIT_INTDATE $INITHOUR $FILENAME $MODEL
done

这是不优雅的,因为我每次发送单个图像时都会打开和关闭FTP会话。我更愿意将给定预测小时的文件名称写入.txt文件(例如:在循环中有一个&#34; echo $ {FILENAME}&gt;&gt; FILEOFFILENAMES.txt&#34;)我的FTP脚本在一个会话中读取并发送所有这些文件。这可能吗?

2 个答案:

答案 0 :(得分:0)

这是可能的。您可以将其添加到shell脚本以生成ftp脚本,然后在生成文件后运行它:

echo open $HOST > ftp.txt
echo user $USER $PASS >> ftp.txt
find . -type f -name '*hrfcst.png' -printf "put destination/%f %f\n" >> ftp.txt
echo bye >> ftp.txt

ftp < ftp.txt

上面的代码将使用命令生成文件ftp.txt并将其传递给ftp。生成的ftp.txt将如下所示:

open host
user user pass
put destination/forecast1.hrfcst.png forecast1.hrfcst.png
put destination/forecast2.hrfcst.png forecast2.hrfcst.png
put destination/forecast3.hrfcst.png forecast3.hrfcst.png
...
bye

答案 1 :(得分:0)

以下脚本会将今天添加的所有文件从本地目录上传到远程ftp目录。

#!/bin/bash

HOST='hostname'
USER='username'
PASSWD='password'

# Local directory where the files are stored.
cd "/local/directory/from where to upload files/"

# To get all the files added today only.
TODAYSFILES=`find -maxdepth 1 -type f -mtime -1`


# remote server directory to upload backup
REMOTEDIR="/directory on remote ftp computer/"

for FILENAME in ${TODAYSFILES[@]}; do
  ftp -n -v $HOST << EOT
  ascii
  user $USER $PASSWD
  prompt
  cd $REMOTEDIR
  put $FILENAME
  bye
  EOT
done