ftp mget 不要覆盖

ftp mget 不要覆盖

我在 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 脚本),rsynclftp值得进行一些研究:

相关内容