rsync - hanya melaporkan file yang diunggah

14

Saya memiliki masalah dengan rsync: apakah itu menunjukkan kepada saya semua file di direktori saya rsyncing (jika menggunakan flag -v) atau tidak sama sekali (bila tidak menggunakan -v).

Saya ingin memiliki rsync quiet kecuali untuk file yang sebenarnya harus diunggah ke ujung. Apakah ada tanda untuk mengaktifkan pelaporan semacam ini? Saya tidak dapat menemukan ini di dokumentasi

dangonfast
sumber

Jawaban:

11

Ya, lihat -ibenderanya. Ini memberikan laporan dari setiap operasi dalam format samar. Lihat halaman manual untuk definisi format yang tepat.

Untuk mendapatkan daftar file yang dikirim ke host jarak jauh, Anda dapat menggunakan yang berikut ini:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'
Oliver
sumber
1
Ini melaporkan lagi semua file, bukan yang diubah.
dangonfast
@gonvaled Tidak, hanya file yang dikirim ke host jarak jauh adalah output (seperti <fcstpoguax filename, di mana bendera yang berbeda menunjukkan mengapa mereka perlu diperbarui). Jika melaporkan semua file, mungkin ada yang salah dengan pengujian Anda atau lingkungan Anda.
Oliver
Saya pikir kamu benar. Saya telah melihat halaman manual dan dijelaskan seperti yang Anda katakan. Tetapi sistem saya melaporkan semua file. Mungkin ada yang salah dengan ujung ...
dangonfast
Mmmm semakin dekat: string pelaporan adalah (untuk semua file) <f..T....... Menurut halaman manual, ini terkait dengan cap waktu.
dangonfast
1
menggunakan grep -E '^[^.]|^$'juga akan membiarkan statistik (atau peringatan, kesalahan, ...) melewati, hanya menghapus garis yang benar-benar membosankan dimulai dengan titik ...
Frank Nocke
9

rsync dengan satu -vsebenarnya hanya mencetak file yang ditransfer. Jika Anda mendapatkan daftar lengkap setiap kali maka itu mungkin berarti bahwa algoritma perbandingan rsync src / dest default, yang didasarkan pada waktu + ukuran modifikasi, tidak cocok untuk kasus Anda. Anda dapat menambahkan flag -c( --checksum) yang membuat rsync membandingkan file dengan checksumming. Perhatikan bahwa ini jelas menimbulkan beberapa I / O overhead.

Sedikit terkait adalah fakta bahwa jika Anda menggunakan --info=flistalih-alih -vmaka Anda mendapatkan output file yang lebih dipangkas (Anda pada dasarnya melewatkan header dan footer dari -voutput khas ).

Amr Mostafa
sumber
1
--info=flisthanya tersedia di rsync> = 3.1, yang tidak tersedia di mana-mana. Sebagai contoh macOS dikirimkan dengan versi kuno 2.6.9 karena Rsync v3 tidak tersedia untuk GPL 3.
chiborg
1
Sementara itu rumor Apple GPL adalah super-juicy, juga ingat bahwa Enterprise Linux memiliki rentang dukungan besar (14 tahun) di mana versi terkunci (dan bercabang) untuk melestarikan sertifikasi dan menjamin kompatibilitas (api + abi) selama umur rilis yang didukung. . Ini sebenarnya satu-satunya cara yang layak untuk melakukan itu, dan efek sampingnya adalah bahwa nomor versi tampak lama dan fitur-fitur baru tidak mengenai Enterprise untuk waktu yang lama.
user2066657
2

satu hal yang muncul di benak saya adalah menggunakan lebih banyak format log verbose dan mencari tahu apa yang ingin Anda dapatkan.

misalnya:

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

ini tidak terlalu kuat, itu tidak akan menangani nama file dengan spasi.

pQd
sumber
1

1. Gunakan -iopsi

Untuk perubahan ikon (atau: cryptic) yang ditandai ini. Output Anda akan terlihat seperti ini:

*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. grep setiap baris dimulai dengan titik.

Biarkan semua baris lain (juga yang kosong, untuk keterbacaan) lewat:

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

Dan di sini kita :-) - Hanya apa yang diperintahkan dokter:

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

Menghindari titik - titik daripada berburu untuk > mendapatkan manfaat juga membiarkan statistik, tetapi juga potensi kesalahan, peringatan dll melewati ...

Memiliki statistik pada akhirnya adalah preferensi pribadi. Jangan gunakan -h --statsjika Anda tidak suka ini. Saya menganggap minat utama Anda adalah tidak melihat ratusan atau ribuan file yang tidak diubah gulir oleh ...

Frank Nocke
sumber
0

Saya tidak berpikir ada bendera untuk melakukan ini tetapi mungkin ada sekarang. Inilah cara saya melakukannya:

rsync -vv [other options] | grep -v 'uptodate'
Mike
sumber
1
Rsync saya (versi 3.0.7) tidak menambah uptodatepelaporan, jadi tidak mungkin untuk memfilternya.
dangonfast
Saya ingin memperbaiki, atau setidaknya mengklarifikasi, apa yang diposting Mike di atas dan apa yang ditunjukkan @ jeckyll2hide. Saya pikir masalahnya bukan bahwa rsync -v tidak lagi memancarkan string "uptodate" tetapi Anda perlu menggunakan rsync -vv. Perhatikan keduanya vs. Saya baru saja memverifikasi ini berfungsi pada Ubuntu 14.04 dengan rsync versi 3.1.0. Mike, dapatkah Anda memperbarui kiriman Anda untuk mencerminkan hal ini?
John Mark Mitchell