У мене є вихідний каталог, який я періодично синхронізую з ціллю за допомогою 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
або щось подібне на сторінці.