在bash脚本中循环FTP

时间:2015-07-10 13:19:25

标签: bash loops ftp

我需要经常通过FTP自动发送文件。最初我只是有一个脚本,用于FTP的stdin,但我意识到每次我这样做,我需要关闭然后重新打开服务器和客户端之间的连接。重新连接比实际发送文件花费更多时间。我试过通过创建一个单独的脚本来打开连接并运行脚本来循环发送文件来避免这种情况。

以下是问题:运行连接脚本后,ftp会自动断开连接。这是连接脚本。

#!/bin/bash

HOST='192.168.1.2'
USER='user'
PASSWD='passwd'

echo "open $HOST
user $USER $PASSWD
ascii" > /tmp/ftp.$$

ftp -ivn < /tmp/ftp.$$ >> ftplog.txt
rm /tmp/ftp.$$

这是发送文件的脚本。

#!/bin/bash
echo "put localfile.txt remotfile.txt" > /tmp/ftp.$$
ftp -ivn < /tmp/ftp.$$ >> ftplog.txt
rm /tmp/ftp.$$

连接脚本打开连接正常但运行后再次关闭它。有什么方法可以避免这种情况吗?

我应该澄清一下,我没有上传文件列表,而是上传了另一个脚本并在更新后发送的单个文件。这个文件尽可能接近实时地反复发送。

2 个答案:

答案 0 :(得分:1)

您可以使用以下脚本上传文件夹中的所有文件

#!/bin/bash

HOST='your host'
USER="your user"
PASSWD="pass"
REMOTEPATH='/upload'

function usage(){
    echo "Usage $0 <folder>"
}

function ftp(){
  ftp -n $HOST <<END_SCRIPT
  quote USER $USER
  quote PASS $PASSWD
  cd $REMOTEPATH
  lcd $1
  mput *
  quit
  END_SCRIPT
}

if [[ $# -ne 1 ]]
    then
        usage
    else
        ftp $1 
        exit 0
fi

答案 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