![从一台服务器到另一台服务器的大型 FTP 传输](https://linux22.com/image/490651/%E4%BB%8E%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%A4%A7%E5%9E%8B%20FTP%20%E4%BC%A0%E8%BE%93.png)
你好,我正在使用 ncftpput 将大量文件从一台服务器传输到另一台服务器
ncftpput -f server.txt -vRdb /public_html /var/www/site.com
发生的情况是,大约 100 次传输后,连接被切断。有数千个文件需要传输。问题是,在连接被切断后,我重新输入命令,它从头开始。替换所有现有文件,使之前的传输变得多余。有没有办法跳过现有文件?手册页中没有,所以我假设没有。那么有人建议使用替代的命令行解决方案吗?
答案1
lftp是一个很棒的工具,可以使用镜像命令编写脚本:
lftp has builtin mirror which can download or update a whole
directory tree. There is also reverse mirror (mirror -R)
which uploads or updates a directory tree on server. Mirror
can also synchronize directories between two remote servers,
using FXP if available.
$ lftp -f
脚本文件:
open ftp://<user>:<pass>@ftp.blah.org/~
set net:timeout 10
set net:max-retries 2
set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 1
mirror dir1 dir1
exit
答案2
您可以尝试使用 ncftpput 的-DD
选项。这将在成功传输后删除本地文件。如果您不想删除 /public_html 目录中的文件,您可以先将它们复制到临时目录中。
答案3
#!/bin/bash
FILES=`cat server.txt`
for FILE in $FILES
do
if [ ! -d "$FILE" ]; then
echo "Uploading $FILE..."
ncftpput -DD -u $FTPUSER -p $FTPPASS $FTPHOST /destination/ftp/dir/$FILE
fi
done
不要忘记设置 FTPUSER、$FTPPASS、$FTPHOST -DD 选项将在成功的上传。第 4 行中的“!-d“$FILE””将跳过 server.txt 中的目录。不要忘记使用“chmod 755 yourscriptfile”使脚本可执行。
答案4
尝试输出