【发布时间】:2014-08-21 10:11:53
【问题描述】:
文件正在通过 FTP 协议传输到我机器上的目录。我需要将这些文件 SCP 到另一台机器并在完成时删除它们。 如何检测 FTP 的文件传输是否已完成并且文件是否可以安全地进行 SCP?
【问题讨论】:
文件正在通过 FTP 协议传输到我机器上的目录。我需要将这些文件 SCP 到另一台机器并在完成时删除它们。 如何检测 FTP 的文件传输是否已完成并且文件是否可以安全地进行 SCP?
【问题讨论】:
没有可靠的方法来检测传输是否完成。有些客户端在实际上传文件之前发送 ALLO 命令并传递文件的大小,但这不是一个明确的规则,所以你不能依赖它。总而言之,客户端可能会流式传输数据,并且在其一侧没有明确的文件“结尾”。
如果客户端在你的控制之下,你可以让它上传扩展名为A的文件,上传后将文件重命名为扩展名B。然后你只传输扩展名B的文件。
【讨论】:
你可以这样写一个脚本:
#!/bin/bash
EXPECTED_ARGS=1
E_BADARGS=65
#Arguments control
if [ $# -lt $EXPECTED_ARGS ]
then
echo "Usage: `basename $0` <folder_update_1> <folder_update_2> <folder_update_3> ..."
exit $E_BADARGS
fi
folders=( "$@" )
for folder in ${folders[@]}
do
#Send folder or file to new machine
time rsync --update -avrt -e ssh /local/path/of/$folder/ user@192.168.0.10:/remote/path/of/$folder/
#Delete local file or folder
rm -r /local/path/of/$folder/
done
它被配置为发送文件夹。如果您希望文件需要对脚本进行少量更改:
time rsync --update -avrt -e ssh /local/path/of/$file user@192.168.0.10:/remote/path/of/$file
rm /local/path/of/$file/
Rsync 类似于 scp。我更喜欢使用 rsync,但您可以更改它。
【讨论】: