Параметр -link-dest от rsync не связан из-за времени файла

Рассмотрим этот тестовый пример:

mkdir a echo 'blah' > a/test mkdir b echo 'blah' > b/test rsync -r --link-dest=/tmp/b /tmp/a/ /tmp/c 

Как и ожидалось, rsync создает c/test жесткую ссылку b/test (обратите внимание на пересчет 2 ):

 # ls -lc/test -rw-r--r-- 2 root root 16 Jan 6 19:43 test 

Теперь посмотрим:

 rm -rc # start over touch b/test rsync -r --link-dest=/tmp/b /tmp/a/ /tmp/c 

Жесткая ссылка не создана:

 # ls -lc/test -rw-r--r-- 1 root root 16 Jan 6 19:50 test 

В manpages говорится (акцент мой):

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

Тем не менее, я думаю, что по умолчанию файл времени не сохраняется и поэтому не имеет никакого значения здесь.

Что происходит? Это ошибка? Что я могу сделать?

Моя цель состоит в том, чтобы сэкономить место на сервере непрерывной интеграции, который размещает много филиалов репозитория, жестко соединяя все одинаковые файлы. Итак, моя фактическая команда:
rsync -r --link-dest=/ci/master /ci-runner/build/ /ci/branch-123 .
Это означает, что меня не волнует время, поэтому я подумал о том, чтобы touch к ним до текущего времени до rsync но это было бы как-то грубое решение, а также касание, похоже, не рекурсивно работает.

One Solution collect form web for “Параметр -link-dest от rsync не связан из-за времени файла”

Вы видите результаты алгоритма быстрой проверки rsync, который решает передать файлы в зависимости от их размера и временной метки. Как указано в man rsync :

Rsync находит файлы, которые необходимо перенести, используя алгоритм быстрой проверки (по умолчанию), который ищет файлы, которые изменились в размере или в последнее время. Любые изменения в других сохраненных атрибутах (в соответствии с запросами опций) производятся в файле назначения непосредственно, когда быстрая проверка указывает, что данные файла не нуждаются в обновлении.

У вас есть выбор:

  • Если вы хотите, чтобы отметка времени была проигнорирована и передавала файлы, основанные только на измененном размере, вы можете использовать параметр --size-only .

    Обратите внимание, что это означает, что rsync не будет передавать измененный файл, если это изменение просто оставило файл с тем же размером.

  • Если вы хотите, чтобы rsync вместо этого проверял, действительно ли содержимое файлов идентично, используйте --checksum . Это может привести к существенному замедлению.

Алгоритм «быстрой проверки» является значением по умолчанию, поскольку он является, как правило, хорошим компромиссом между скоростью и точностью.

  • Изменение измененной даты файла в зависимости от даты в имени файла
  • touch и tar из текстового файла
  • rsync и резервное копирование и изменение часового пояса
  • Почему ls -lrth и ls -ltch дают разные результаты
  • Задача Cron для удаления файлов старше 3 дней
  • Как удалить файлы в одной папке, которая старше 60 дней в UNIX?
  • вычислять время отклика из записей журнала времени
  • Каково законное использование команды `touch`?
  • Удаление файлов по годам
  • Можете ли вы прочитать обновленное mtime, но при чтении содержимого они еще не обновлены?
  • Использует ли `git archive` неправильную временную метку файла?
  • Interesting Posts

    Как установить Adobe Reader 11.x на Mint 18 x64 (Ubuntu 16.04) с помощью Wine 1.8

    Кодирование файлов / proc / <pid> / cmdline

    Микширование между учетной записью пользователя root и first non-root

    почему csv потребляет больше размера файла в моем скрипте unix?

    Что делает процесс Unix умирать с Broken pipe?

    Как добавить автозаполнение пути к пользовательской функции завершения в zsh?

    Есть ли способ ограничить объем памяти, который может использовать конкретный процесс в Unix?

    Как обрабатывать ключи в сценарии оболочки?

    Почему `setopt nohup` требуется, чтобы сделать работу nohup watch в zsh?

    Как включить учет свопинга для группы памяти в Archlinux?

    Запуск эмулятора терминала, не зная, какие из них установлены

    Использование GPU для каждого процесса на машине Linux (CUDA)

    Невозможно получить tty (1..6) в Linux mint 18.1 Cinnamon 64-bit

    Использует ли Gnome Shell Mutter?

    найти символ и присоединиться к этой строке со следующей

    Linux и Unix - лучшая ОС в мире.