rsync - повідомляти лише про завантажені файли


14

У мене проблема з rsync: або вона показує мені всі файли в каталогах, які я rsyncing (якщо використовується прапор -v), або взагалі нічого (коли не використовується -v).

Мені б хотілося, щоб rsync був тихим, за винятком файлів, які насправді потрібно було завантажити в далекий кінець. Чи є прапор для активації такого роду звітів? Я не можу цього знайти в документації

Відповіді:


11

Так, перевірити -iпрапор. Він дає звіт про кожну операцію в криптичному форматі. Точне визначення формату див. На сторінці чоловіка.

Для отримання списку файлів, що надсилаються на віддалений хост, ви можете скористатися наступним:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Це знову звіт про всі файли, а не про змінені файли.
dangonfast

@gonvaled Ні, виводяться лише файли, які надсилаються на віддалений хост (як <fcstpoguax filename, де різні прапори показують, чому їх потрібно оновлювати). Якщо він повідомляє про всі файли, щось може бути не так з вашим тестом або оточенням.
Олівер

Я думаю, ти маєш рацію. Я поглянув на сторінку, і вона описана, як ви кажете. Але моя система звітує про всі файли. Можливо, щось не так із
дальнім

Мммм. наближається: рядок звітності є (для всіх файлів) <f..T....... За даними сторінки, це пов'язано з мітками часу.
dangonfast

1
використання grep -E '^[^.]|^$'також дозволило б пропустити статистичні (або попередження, помилки, ...) рядки, лише видаливши дійсно нудні лінії, починаючи з крапки ...
Франк Нокк

10

rsync з одним -vфактично друкує лише передані файли. Якщо ви отримуєте повний список кожного разу, це, ймовірно, означає, що алгоритм порівняння rsync src / dest за замовчуванням, який заснований на часі модифікації + розмір, не підходить для вашого випадку. Ви можете додати прапор -c( --checksum), який змушує rsync порівнювати файли шляхом контрольної суми. Зауважте, що це очевидно спричиняє деякий накладний ввід / вивід.

Трохи пов'язаний той факт, що якщо ви використовуєте --info=flistзамість -vцього, ви отримуєте більш обрізаний вихід файлів (ви в основному пропускаєте заголовок і колонтитул типового -vвиводу).


1
--info=flistдоступний лише у rsync> = 3.1, який доступний не скрізь. Наприклад, macOS постачається з давньою версією 2.6.9, оскільки Rsync v3 не відповідає GPL 3.
chiborg

1
Хоча слух Apple GPL надзвичайно соковитий, також пам’ятайте, що Enterprise Linux має широкий діапазон підтримки (14 років), коли версії заблоковані (і розгалужені), щоб зберегти сертифікацію та гарантувати сумісність (api + abi) протягом підтримуваного терміну випуску . Насправді це єдино можливий спосіб зробити це, і побічним ефектом є те, що номери версій з’являються старими, а нові функції не впливають на Enterprise, що може здатися довгим.
користувач2066657

2

одна річ, яка мені спадає на думку, - це використовувати більше докладний формат журналу і дивовижно, що ви хочете отримати.

наприклад:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

це не дуже надійно, воно не буде добре обробляти імена файлів з пробілами.


1

1. Використовуйте -iопцію

Для цих іконізованих (або: криптовалют) міняйте прапори. Вихід буде виглядати приблизно так:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. обв’яжіть кожен рядок, починаючи з крапки.

Нехай усі інші рядки (також порожні для розбірливості) проходять:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

І ось ми :-) - Тільки те, що лікар наказав:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Уникнення крапок, а не полювання > на користь, також дозволяє передати статистику, але також можуть пройти потенційні помилки, попередження тощо ...

Маючи статистику в кінці - це особиста перевага. Не використовуйте, -h --statsякщо вам це не подобається. Я припускаю, що ваш ключовий інтерес полягає в тому, щоб не бачити сотні чи тисячі незмінних файлів, які прокручуються на ...


0

Я не думаю, що для цього є прапор, але це може бути і зараз. Ось як я це зробив:

rsync -vv [other options] | grep -v 'uptodate'

1
Мій rsync (версія 3.0.7) не додає uptodateдо звітів, тому неможливо відфільтрувати це.
dangonfast

Я хочу виправити або принаймні уточнити, що Майк розмістив вище та що @ jeckyll2hide вказав. Я думаю, проблема полягає не в тому, що rsync -v більше не випускає рядок "uptodate", а в тому, що вам потрібно використовувати rsync -vv. Зауважте, що два - я щойно перевірив це на Ubuntu 14.04 з версією rsync 3.1.0. Майк, ти можеш оновити свою публікацію, щоб це відобразити?
Джон Марк Мітчелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.