首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用镜像命令时,lftp如何决定需要传输哪些文件?

当使用镜像命令时,lftp如何决定需要传输哪些文件?
EN

Unix & Linux用户
提问于 2021-02-26 23:30:07
回答 2查看 2.2K关注 0票数 2

lftp实用程序有一个mirror命令,它将本地目录与远程服务器上的目录同步。这个命令如何决定哪些文件需要传输?

特别是,如果一个文件已经存在于本地目录和远程目录中,它如何决定是否应该覆盖目标目录中的文件?它只是基于修改时间,还是使用了更复杂的启发式?

EN

回答 2

Unix & Linux用户

发布于 2021-07-01 17:20:23

在比较文件时,lftp不执行文件内容完整性检查(例如散列)。在确保下载文件的完整性时,这一点很重要。

在处理损坏的下载时,我首先怀疑了这一点,并注意到mirror命令完成得太快,无法执行哈希操作。然后我通过检查lftp源代码来确认。具体来说:FileInfo::SameAs方法处理这个问题(github上最新的src (粘贴在下面))。

代码语言:javascript
复制
bool  FileInfo::SameAs(const FileInfo *fi,int ignore) const
{
   if(defined&NAME && fi->defined&NAME)
      if(strcmp(name,fi->name))
     return false;
   if(defined&TYPE && fi->defined&TYPE)
      if(filetype!=fi->filetype)
     return false;

   if((defined&TYPE && filetype==DIRECTORY)
   || (fi->defined&TYPE && fi->filetype==DIRECTORY))
      return false;  // can't guarantee directory is the same (recursively)

   if(defined&SYMLINK_DEF && fi->defined&SYMLINK_DEF)
      return (strcmp(symlink,fi->symlink)==0);

   if(defined&DATE && fi->defined&DATE && !(ignore&DATE))
   {
      time_t p=date.ts_prec;
      if(p<fi->date.ts_prec)
     p=fi->date.ts_prec;
      if(!(ignore&IGNORE_DATE_IF_OLDER && date<fi->date)
      && labs(date-fi->date)>p)
     return false;
   }

   if(defined&SIZE && fi->defined&SIZE && !(ignore&SIZE))
   {
      if(!(ignore&IGNORE_SIZE_IF_OLDER && defined&DATE && fi->defined&DATE
       && date<fi->date)
      && (size!=fi->size))
     return false;
   }

   return true;
}

仔细看一看,您可以看到lftp试图检查以下内容:

  • 文件名
  • 文件类型
  • 符号连接与否
  • 日期
  • 文件大小

但是,即使是这些检查也不能完全信任,因为如果某些内容返回为未定义的,则简单地跳过这些检查。

如果幸运的话,FTP主机将提供一个带有校验和散列的文本文件,以便验证下载的内容。我没那么幸运,不得不完全重新下载。

票数 4
EN

Unix & Linux用户

发布于 2021-02-27 01:01:17

很可能是在检查文件大小和/或创建时间,以确定是否修改了该文件,除非您指定要复制哪些文件。

LFTP手册的一小部分:

代码语言:javascript
复制
                   --ignore-time              ignore time when deciding whether to download
                   --ignore-size              ignore size when deciding whether to download
                   --only-missing             download only missing files
                   --only-existing            download only files already existing at target
          -n,      --only-newer               download only newer files (-c won't work)
                   --upload-older             upload even files older than the target ones
                   --transfer-all             transfer all files, even seemingly the same at the
                                              target site
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/636649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档