lftpは、ミラーコマンドを使用するときに転送するファイルをどのように決定しますか?

lftpは、ミラーコマンドを使用するときに転送するファイルをどのように決定しますか?

lftpユーティリティには、mirrorローカルディレクトリをリモートサーバーのディレクトリと同期させるコマンドがあります。コマンドは転送するファイルをどのように決定しますか?

特に、ファイルがローカルディレクトリとリモートディレクトリの両方にすでに存在する場合は、ターゲットディレクトリのファイルを上書きする必要があるかどうかをどのように判断しますか?修正時間だけに基づいていますか?それとも、より複雑な経験的方法を使用しますか?

答え1

本当にlftpいいえファイルを比較するときに、ファイルコンテンツの整合性チェック(ハッシュなど)を実行します。ダウンロードしたファイルの整合性を確保するときは、この点を理解することが重要です。

私は破損したダウンロード作業中に初めてこれを疑って、ハッシュが完了するmirrorにはコマンドがすぐに完了することがわかりました。その後、lftpソースコードを確認して確認しました。具体的には:FileInfo::SameAsメソッドはこれを処理します(githubの最新src(下に貼り付けました))。

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ホストはチェックサムハッシュを含むテキストファイルを提供するので、ダウンロードした内容を確認できます。運が悪く、完全に再ダウンロードする必要がありました。

答え2

コピーするファイルを指定しない限り、ファイルのサイズと作成時間を確認してファイルが変更されたことを確認することがよくあります。

小さな部分LFTPマニュアル:

                   --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

関連情報