Змусити rsync оновлювати наявні файли спочатку, створювати нові пізніше?


1

У мене є вихідний каталог, який я періодично синхронізую з ціллю за допомогою rsync:

rsync --bwlimit=1600 --recursive --times
      --omit-dir-times --copy-links --modify-window=30
      --inplace --delete-before --progress --stats --whole-file
      --itemize-changes --human-readable ./ /media/0123-4567/

Цільовий носій - це саме потрібний розмір для синхронізації: цільовий розділ 1000 Мб, джерело має 990 МБ файлів; синхронізація з джерела до порожньої цілі працює чудово.

Проблема полягає в тому, коли я синхронізую ціль, яка містить старішу версію: деякі існуючі вихідні файли менші у поточній версії, а деякі нові. Загальний розмір залишається 990 МБ; але rsync, схоже, обирає стратегію "спочатку скопіюйте нові файли, а потім оновіть існуючі", перша частина не працюватиме, тому що місця, яке повинно бути звільнене оновленням, ще немає.

                                       version 1     version 2
 files not changed:                     800 MB        800 MB
 new files in v2:                         0 MB         80 MB
 files changed between versions:        190 MB        110 MB 

 total                                  990 MB        990 MB

Іншими словами, як я можу змусити rsync оновити ціль спочатку (що, в моєму випадку, звільнить місце), а вже потім додавати нові файли ?

Поки що я зламав це, маючи два окремих виклики, що відрізняються лише цим параметром:

rsync --existing [...]
rsync --ignore-existing [...]

Це спочатку оновить наявні файли та скопіює нові пізніше; Чи є спосіб це зробити за допомогою однієї команди?


Зверніть увагу , що є аналогічні функціональні можливості для файлів , які не існують в новій версії: --delete-before; Я не знайшов * --update-beforeабо щось подібне на сторінці.
Пісквор

Також використання більшого цільового розділу неможливе (ціль не є звичайним диском, який мені потрібен, мені потрібно працювати з тим, що у мене є).
Пісквор

Відповіді:


3

Поки що я зламав це, маючи два окремих виклики, що відрізняються лише цим параметром:

rsync - існуючий [...]
rsync - існуючий [...]

Так, це правильний шлях.

Це спочатку оновить наявні файли та скопіює нові пізніше; Чи є спосіб це зробити за допомогою однієї команди?

Нема потреби:

  • З точки зору швидкості ви жертвуєте лише незначними накладними витратами
  • З точки зору документації, це набагато чіткіше в заявленні того, що ви робите, ніж деякі неявні способи.

Хороші бали - statнакладні витрати для --timesповинні бути незначними; якби я використовував --checksum, це може мати ефект.
Пісквор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.