Как lftp решает, какие файлы необходимо передать при использовании команды зеркала?

Судя по всему, передача -gtk — это какая-то графическая программа, которую вы желаете запустить? В этом случае вам нужно указать cron, на каком дисплее его запускать. Попробуйте это в своем crontab перед вашей строкой (, предполагая, что вы используете дисплей 0):

export DISPLAY=:0

У вас также должны быть сообщения об ошибках в вашей почте (вероятно /var/mail/username ). Это расскажет нам больше о проблеме.

0
27.02.2021, 01:30
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
1
18.03.2021, 22:28

lftp не выполняет проверку целостности содержимого файла (, например хэш )при сравнении файлов. Это важно знать при обеспечении целостности загружаемых файлов.

Впервые я заподозрил это, когда имел дело с поврежденной загрузкой и заметил, что команда mirrorвыполняется слишком быстро для выполнения хеширования. Затем я подтвердил, проверив исходный код lftp. В частности :метод FileInfo::SameAsобрабатывает этот(последний src на github (, вставленный ниже )).

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 пытается проверить следующее:

  • имя файла
  • тип файла
  • символическая ссылка или нет
  • дата
  • png

Но даже этим проверкам нельзя полностью доверять, потому что они просто пропускаются, если что-то возвращается как неопределенное.

Если вам повезет, хост FTP предоставит текстовый файл с хэшами контрольной суммы, чтобы вы могли проверить загруженный контент. Мне не повезло и пришлось полностью перекачивать.

1
01.07.2021, 17:20

Теги

Похожие вопросы