我正在制作一个用于从本地服务器自动下载文件备份的脚本。有很多文件,所以为了避免下载未更改的文件,我想在下载任何东西之前将远程文件哈希与本地文件哈希进行比较。但是,我无法在我的 vsFTPd 服务器上使用 HASH 命令。
我认为这意味着 HASH 命令以某种方式被禁用或禁止,但数小时的谷歌搜索尚未告诉我如何启用它,或者 vsFTPd 是否支持 HASH 命令。
有人知道这是否可能吗?或者,如果 vsFTPd 不支持 HASH 命令,我可以使用另一个 Ubuntu 的 FTP 服务器吗?
这是一个例子:
erlend@server:~$ ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 3.0.3)
Name (localhost:erlend): erlend
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 EPRT command successful. Consider using EPSV.
150 Here comes the directory listing.
-rw-r--r-- 1 1002 1002 102653 Oct 05 08:19 myfile.zip
226 Directory send OK.
但是当我尝试获取文件哈希时,我得到:
ftp> HASH myfile.zip
?Invalid command
如评论中所建议的,尝试不带参数(和小写!):
ftp> hash
Hash mark printing off.
ftp> hash
Hash mark printing on (1024 bytes/hash mark).
ftp> hash 1
Hash mark printing on (1 bytes/hash mark).
ftp> hash 2
Hash mark printing on (2 bytes/hash mark).
ftp> hash
Hash mark printing off.
ftp> hash myfile.zip
Hash mark printing off.
这不会回答您关于比较 HASH 的问题,但是对于评论来说太长了。
如果您想避免两次下载文件,在大多数情况下下载具有不同修改时间或不同大小的文件就足够了。如果是这种情况,这个关于使用lfpt的答案将很有用。
它使用
mirror
选项使您的 FTP 文件夹和本地文件夹保持同步,仅下载已更改的文件。从GabrieleV的链接答案中:
警告:确保目标目录存在,否则cd命令会失败,所以包括删除文件树的操作 将在错误的目录(root)进行!
在您的服务器上有一个每天在
/etc/cron.daily
. 不需要做任何特殊crontab
的魔法。只是一个可执行的脚本。这是我已经很方便计算文件的哈希和的一个:
因此,您可以将文件下载
eyesome.md5
到远程计算机。注意:如果您的文件名带有路径前缀,您可能必须使用 或其他实用程序将其从服务器路径更改为本地
sed
路径grep
。然后运行:
失败的文件 (
eyesome-src.sh
和wake-eyesome.sh
) 您需要下载。