Як rsync тільки нові файли


143

Я намагаюся налаштувати rsync для синхронізації мого основного веб-сервера на віддалений сервер, додавши новостворений файл до пізнішого.

Ось команда, яку я використовую:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Але здається, що веб-сервер фактично передає всі файли, незважаючи на прапор '- update'. Я спробував різні комбінації прапорців (наприклад, опущення "-a" та використання "-vv"), але жодне не допомогло. Тож цікаво, як я можу змінити команду rsync для надсилання лише нещодавно доданих файлів. Дякую


2
Якщо ви хочете синхронізувати файли на віддаленому сервері, чи не повинен він бути останнім? тобто rsync /foo/bar remoteuser@remotehost:/foo/bar
ostrokach

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

2
Жоден із відповідей не вирішує проблему, коли локальні файли не були повністю скопійовані до віддаленого пункту призначення, і ви хочете лише rsync новіших файлів.
Аксель Брегнсбо

Я просто знайшов -cваріант. Він пропускає наявні файли на основі контрольної суми замість часу модифікації та розміру.
haheute

Відповіді:


180

Від man rsync:

--ignore-existing       skip updating files that exist on receiver

--updateробить щось дещо інше, імовірно, тому ви отримуєте несподівані результати (див. man rsync):

Це змушує rsync пропускати будь-які файли, які існують у пункті призначення, та мати модифікований час, який є новим, ніж вихідний файл . (Якщо в існуючому файлі призначення є час модифікації, рівний до вихідного файлу, він буде оновлений, якщо розміри різні.)


1
Ну насправді я спробував команду з "--ignore-postojeтими" замість "- update". Він закінчується швидко, але не ставить нові файли у віддалений хост. Будь-які ідеї? Спасибі
supermario

13
Сторінки людини смокчуть (саме так я пішов туди), конкретний випадок, чи --ignore-existingозначає не перенести файли, які існують на приймачі, або не передавати файли, якщо на приймачі існує якийсь файл / папка з тим самим іменем?
puk

7
--update чи пропускати файли , коли mtimes ідентичні (що НЕ то , що має на увазі формулювання). Я це перевірив. Я вважаю, що формулювання буде краще зрозуміти, якби в ній було сказано, що "будуть скопійовані лише вихідні файли, новіші за призначенням".
Восьминіг

4
@Octopus "копіюватимуться лише вихідні файли, новіші за призначенням" ... або вихідні файли, які мають той самий час модифікації, що і їхні аналогічні файли, але мають різний розмір . Я думаю, що це важливий момент. (Кріс уже це пояснив, дякую)
Джонатан Комар

Тож вам потрібні --ignore-існуючі та -r (рекурсивні). -v (багатослівний) теж приємно мати :-)
DutchUncle

40

У моєму випадку у мене були подібні проблеми: всі файли передавались замість лише модифікованих / нових. Я вирішив це за допомогою параметрів -t(замість -a) та -P(еквівалент --partial --progress):

rsync -h -v -r -P -t вихідна ціль

Це передає лише нові файли та файли, які вже є, але модифіковані: -aробить занадто багато, як синхронізація ідентифікатора користувача та групи, яка в моєму випадку не може працювати, оскільки у моїх вихідних та цільових системах є різні користувачі та групи.

Детально параметри:

  • -h: людські читані номери
  • -v: багатослівний
  • -r: повторюється в каталогах
  • -P: --partial(зберігати частково передані файли) +
            --progress(показати прогрес під час передачі)
  • -t: зберегти час модифікації

2
+1 для "-а робить занадто багато" (дійсно -rlptgoD, тому дозвіл не дозволено, групи та власник збереглися - не мої типові резервні копії для безпечної гри ...)
Frank Nocke

2

З мого досвіду роботи з rsync, копіювання розділів розміром 1 ТБ занадто велике, щоб бути ефективним. Обробляти це потрібно rsync назавжди. Натомість робіть це за допомогою підкаталогів. Тобто запустіть rsync для кожного головного підкаталогу. Це проходить набагато швидше, якщо не доведеться жонглювати десятками тисяч файлів.


1
Можливо, у вас не вистачило пам'яті, і ваша система почала мінятися?
Марсель Беркхард

-2

Спробуйте

rsync -zvrt --update SOURCE DESTN

8
Трохи більше пояснень вищезгаданій команді було б вдячно для ОП.
Пешке

зі сторінки man `` -u, --оновіть пропуск файлів, які новіші на приймачі`
ShoeLace
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.