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

관련 정보