Отримати список переданих файлів від rsync?


15

В даний час я використовую rsyncсценарій, який розгортає додаток PHP з інсценізації на виробничий сервер. Ось як:

rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/

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

ПРИМІТКА. Найкраще, що я міг зробити поки що - grep fcstце результати, але я шукаю rsyncваріант, який я впевнений, що він є, але я не можу його знайти на сторінках довідників.

Спасибі заздалегідь!

Відповіді:


6

Якщо є можливість rsync робити саме те, що ви просите, я також не знайшов її на сторінці сторінки. :-)

При цьому, я не бачу проблеми зі зчепленням результату, rsync -iщоб проаналізувати саме те, що потрібно. Мені це приємно і Unixy.

Один прискіпливий ніт-квібл з вашою командою rsync: the -ris redund, як це мається на увазі -a.


2
Спасибі людина. Цікаво, чому (з різноманіттям варіантів цієї програми) немає варіанту для цього. Мені здається досить базовим.
Мауро

Привіт Кевін, насправді є варіант: -Pдля прогресу робиться саме це в -nналаштуваннях дриурена, хоча -iі не помиляється. Дивіться мою відповідь нижче.
Роберт

7

Використовуйте --out-formatопцію

За даними сторінки людини:

Вказуючи --out-formatпараметр, буде згадуватися кожен файл, dir тощо, який істотно оновлюється (переданий файл, відтворений симпосилання / пристрій або каталог).

Якщо вам потрібні лише фактичні назви файлів ( --out-format="%n"), ваша команда сухого запуску може виглядати так:

rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/


Коли rsync викликається з -v, він внутрішньо використовує цю опцію з форматом за замовчуванням "%n%L", який повідомляє вам лише ім'я файлу, і, якщо item - це посилання, де він вказує.

Але це також включає короткий підсумок на початку та в кінці процесу синхронізації.

Щоб позбутися цього резюме, скористайтеся цією --out-formatопцією безпосередньо.

Btw. -iтакож внутрішньо використовує --out-format, але з форматом "%i %n%L".


4

Починаючи з rsync v3.1.0, випущеного в 2013 році, є --infoпрапор, який дозволяє тонкозернисту контролювати вихід.

 --info=FLAGS
          This option lets you have fine-grained control over the information output you want to see.  An individual flag name may be followed
          by a level number, with 0 meaning to silence that output, 1 being the default output level, and higher numbers increasing the output
          of that flag (for those that support higher levels).  Use --info=help to see all the available flag names,  what  they  output,  and
          what flag names are added for each increase in the verbose level.  Some examples:

              rsync -a --info=progress2 src/ dest/
              rsync -avv --info=stats2,misc1,flist0 src/ dest/

          Note  that  --info=names  output  is  affected  by the --out-format and --itemize-changes (-i) options.  See those options for more
          information on what is output and when.

          This option was added to 3.1.0, so an older rsync on the server side might reject your attempts at fine-grained control (if  one  or
          more  flags  needed  to  be  send to the server and the server was too old to understand them).  See also the "max verbosity" caveat
          above when dealing with a daemon.

Доступні --infoпрапори:

Use OPT or OPT1 for level 1 output, OPT2 for level 2, etc.; OPT0 silences.

BACKUP     Mention files backed up
COPY       Mention files copied locally on the receiving side
DEL        Mention deletions on the receiving side
FLIST      Mention file-list receiving/sending (levels 1-2)
MISC       Mention miscellaneous information (levels 1-2)
MOUNT      Mention mounts that were found or skipped
NAME       Mention 1) updated file/dir names, 2) unchanged names
PROGRESS   Mention 1) per-file progress or 2) total transfer progress
REMOVE     Mention files removed on the sending side
SKIP       Mention files that are skipped due to options used
STATS      Mention statistics at end of run (levels 1-3)
SYMSAFE    Mention symlinks that are unsafe

ALL        Set all --info options (e.g. all4)
NONE       Silence all --info options (same as all0)
HELP       Output this help message

Options added for each increase in verbose level:
1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE
2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP

1
Це приголомшливо, дякую. Я не мав уявлення, що цей прапор існує, тому що я використовую Mac - навіть останній MacOS встановлює rsync версію з 2004 року lol. Ура, Apple ...
кручений піксель

0

Не впевнений, чи це відрізняється між використовуваними версіями / параметрами, але в моїй версії, коли я використовую -iопцію, я отримую такий список:

>f..T...... existing-file.png
>f+++++++++ new-file.png
cd+++++++++ new-dir/
>f+++++++++ new-dir/new-file.png

Тож просте рішення отримати лише список файлів, які фактично передаються, просто запустіть:

rsync [your options here] | grep -v "f..T......"

Це просто приховає всі рядки, що містять f..T....... Так ефективно це приховає однакові файли.


0

Насправді ви наче відповіли на власне запитання, оскільки у вашій оригінальній команді вже є: --progress

Це правильний варіант, хоча сторінка "man" трохи критична щодо цього:

     --progress              show progress during transfer
 -P                          same as --partial --progress

Це ніби має сенс, оскільки ви викликаєте rsyncрядок у режимі dryrun, транзитер не відбувається, але ви все одно матимете прогрес: а саме файли, які змінилися і будуть передані.

Таким чином ви отримуєте акуратний невеликий список усіх файлів, наприклад:

У пункті призначення вже є копія зміненого файла, оновленого у вихідному та старому файлі, яка залишається незмінною. Джерело також має додатковий файл: newfile.

#~$ ls -lhan /tmp/destination/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:08 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile



#~$ ls -lhan /tmp/source/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:15 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 newfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile

Якщо ми потім посилаємося на вашу команду rsync, але видаляємо деталізацію -iта просто додаємо сухурунь-n

#~$ ~$ rsync -n -rza --progress --stats --ignore-times --checksum /tmp/source/ /tmp/destination/
sending incremental file list
changedfile
newfile

Number of files: 4 (reg: 3, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 2 bytes
Total transferred file size: 2 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 187
Total bytes received: 22

sent 187 bytes  received 22 bytes  418.00 bytes/sec
total size is 2  speedup is 0.01 (DRY RUN)

Ви отримуєте список лише тих файлів, які rsync перекладе: змінений файл та новий файл.

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