我需要经常通过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.$$
连接脚本打开连接正常但运行后再次关闭它。有什么方法可以避免这种情况吗?
我应该澄清一下,我没有上传文件列表,而是上传了另一个脚本并在更新后发送的单个文件。这个文件尽可能接近实时地反复发送。
答案 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