此脚本将通过 FTP 发送文件,然后将其删除。但是,有时,文件在传输结束之前被删除,然后接收到一个空文件。
#!/bin/bash
tar czf <sourcefile> --directory=<directory> log
ftp -v -n $1 <<END_OF_SESSION
user <user> <password>
put <sourcefile> <targetfile>
bye
END_OF_SESSION
rm <sourcefile>
什么是同步进程的好方法,以便在发送完成后进行删除?
如下更新所示,有时无法建立连接。
笔记:
在 Lubuntu 16.04 上运行。
随行更新tar
。
失败会话的日志信息:
Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090056
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
221 Goodbye.
和一个成功的:
Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090344
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
6901 bytes sent in 0.00 secs (43.5848 MB/s)
221 Goodbye.
该
ftp
命令没有允许您检查传输是否成功的功能。如果您必须继续使用此 FTP 传输实现,则有两种选择:ls
并检查文件长度是否符合预期。请记住,这ls
取决于服务器,并且可能因服务器实现而异。最好的解决方案(除了将 FTP 完全替换为
rsync
orscp
)是使用提供可靠传输状态的不同 FTP 客户端。该
lftp
命令应该在大多数 Linux 发行版中都可用。该-E
标志将put
命令配置为更像mv
而不是cp
:它在成功传输后删除源文件。