我在 ftp 脚本中使用 mget,并希望 mget 跳过获取本地目录中已存在的文件。有这样的办法吗?如果是这样,如果本地和远程文件不同,mget是否还有办法继续进行?
编辑:两个都是很好的答案,我选择了第二个,因为它提供了一个示例,我将其修改为:
lftp $HOST -u $USER,$PASSWD -e 'mirror --verbose=3 --only-newer --include "my-extended-regex-expression-of-include-file-patterns" / transfer/'
答案1
有许多不同的ftp
实现。我不知道有哪个ftp
程序有mget
在下载之前检查本地文件的命令。
有许多程序可以通过 FTP 下载文件,并且确实有您想要的内容。
-
lftp ftp.example.com <<EOF mirror --only-missing --file=/path/to/*.ext . EOF
替换
--only-missing
为--only-newer
仅下载较新的文件。 -
wget -nc 'ftp://ftp.example.com/path/to/*.ext'
-N
添加仅下载较新文件的选项。
或者,这是执行复杂操作的最佳解决方案,挂载远程文件系统,然后使用普通的文件操作工具。您可以使用以下命令挂载 FTP 目录卷曲FTPFS。
mkdir mnt
curlftpfs ftp://ftp.example.com/ mnt
rsync -a --ignore-existing mnt/*.ext . # replace --ignore-existing by -u to download only newer files
fusermount -u mnt
答案2
ftp
本身不能做到这一点(大多数变体也不能做到这一点sftp
)。这通常是使用功能更强大的程序(例如rsync
或 )来完成的lftp
。
如果您无法使用rsync
,至少有一些应用程序ftp
可以为第一部分(现有文件)进行配置。例如:
但是(已经使用了该脚本和相关的 Perl 脚本),rsync
并lftp
值得进行一些研究:
和