Dapatkan daftar file yang ditransfer dari rsync?

14

Saat ini saya menggunakan rsyncpada skrip yang menyebarkan aplikasi PHP dari pementasan ke server produksi. Begini caranya:

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

Ini saat ini mengeluarkan daftar setiap file yang sedang dibandingkan (setiap file dalam proyek), tapi saya ingin itu hanya menampilkan yang dimodifikasi, jadi saya bisa menjalankannya dengan --dry-runopsi untuk memeriksa bahwa setiap penyebaran hanya memperbarui file yang diinginkan.

CATATAN: Yang terbaik yang bisa saya lakukan sejauh ini adalah grep fcsthasilnya, tetapi saya sedang mencari rsyncopsi yang saya yakin ada di sana tetapi saya tidak dapat menemukannya di halaman manual.

Terima kasih sebelumnya!

Mauro
sumber

Jawaban:

6

Jika ada opsi rsync untuk melakukan persis apa yang Anda minta, saya juga tidak menemukannya di manual. :-)

Yang mengatakan, saya tidak melihat masalah dengan menangkap output rsync -iuntuk menguraikan dengan tepat apa yang Anda butuhkan. Rasanya menyenangkan dan Unixy bagi saya.

Satu nit-picky quibble dengan perintah rsync Anda: -ritu redundan, seperti yang tersirat oleh -a.

Kevin DeGraaf
sumber
2
Terima kasih sobat. Saya heran mengapa (dengan beragam pilihan yang dimiliki program ini) tidak ada pilihan untuk itu. Tampaknya cukup mendasar bagi saya.
Mauro
Hai Kevin, sebenarnya ada opsi: -Puntuk kemajuan melakukan hal itu dalam -npengaturan dryrun, meskipun -itidak salah juga. Lihat jawaban saya di bawah ini.
Robert Riedl
6

Gunakan --out-formatopsi

Menurut halaman manual:

Menentukan --out-formatopsi akan menyebutkan setiap file, dir, dll. Yang akan diperbarui secara signifikan (file yang ditransfer, symlink / perangkat yang dibuat ulang, atau direktori).

Jika Anda hanya memerlukan nama file aktual ( --out-format="%n"), perintah jalankan Anda mungkin terlihat seperti:

rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/


Ketika rsync dipanggil dengan -v, ia menggunakan opsi ini secara internal dengan format default "%n%L", yang memberi tahu Anda hanya nama file dan, jika itemnya adalah tautan, di mana ia menunjuk.

Tetapi ini juga termasuk ringkasan singkat di awal dan di akhir proses sinkronisasi.

Untuk menghilangkan ringkasan itu, gunakan --out-formatopsi secara langsung.

Btw. -ijuga menggunakan internal --out-format, tetapi dengan format "%i %n%L".

flu
sumber
3

Dimulai dengan rsync v3.1.0, dirilis pada 2013, ada --infoflag yang memungkinkan kontrol yang baik atas output.

 --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.

--infoBendera yang tersedia adalah:

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
Corneliu
sumber
1
Ini luar biasa, terima kasih. Saya tidak tahu bendera ini ada karena saya menggunakan Mac - bahkan MacOS terbaru menginstal versi rsync dari tahun 2004 lol. Cheers Apple ...
twistedpixel
0

Tidak yakin apakah ini berbeda antara versi / opsi yang digunakan tetapi dalam versi saya ketika saya menggunakan -iopsi saya mendapatkan daftar seperti:

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

Jadi solusi sederhana untuk mendapatkan hanya daftar file yang benar-benar ditransfer cukup jalankan:

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

Ini hanya akan menyembunyikan semua baris yang mengandung f..T....... Jadi secara efektif ini akan menyembunyikan file yang identik.

Nux
sumber
0

Sebenarnya, Anda semacam menjawab pertanyaan Anda sendiri, karena perintah awal Anda sudah memilikinya: --progress

Ini adalah opsi yang benar, meskipun halaman manual sedikit samar tentangnya:

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

Ini agak masuk akal, karena Anda memanggil rsyncstring Anda dengan mode dryrun, tidak ada transer terjadi, tetapi Anda masih akan mengalami kemajuan: yaitu file yang telah berubah dan akan ditransfer.

Dengan cara ini Anda mendapatkan daftar kecil yang rapi dari semua file, misalnya:

Tujuan sudah memiliki salinan file perubahan yang telah diperbarui di sumber dan file lama, yang tetap tidak berubah. Sumber juga memiliki file tambahan: 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

Jika kami menjalankan perintah rsync Anda, tetapi hapus itemisasi -idan tambahkan dryrun-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)

Anda mendapatkan daftar hanya file rsync yang akan dikirimkan: filefile dan filefile.

Robert Riedl
sumber