Solusi 1:
Sekarang ada cara resmi untuk melakukannya di rsync (protokol versi 3.1.0 versi 31, diuji dengan Ubuntu Trusty 14.04).
#> ./rsync -a --info=progress2 /usr .
305,002,533 80% 65.69MB/s 0:00:01 xfr#1653, ir-chk=1593/3594)
Saya mencoba dengan /usr
saya folder karena saya menginginkan fitur ini untuk mentransfer seluruh sistem file, dan /usr
tampaknya menjadi sampel perwakilan yang baik.
--info=progress2
memberikan persentase keseluruhan yang bagus, meskipun itu hanya sebagian nilai. Faktanya, /usr
saya folder lebih dari 6 pertunjukan:
#> du -sh /usr
6,6G /usr/
dan rsync
butuh banyak waktu untuk memindai semuanya. Jadi hampir sepanjang waktu persentase yang saya lihat sekitar 90% selesai, namun tetap menyenangkan melihat ada sesuatu yang disalin :)
Referensi:
- https://stackoverflow.com/a/7272339/1396334
- https://download.samba.org/pub/rsync/NEWS#3.1.0
Solusi 2:
Berikut ini berlaku untuk rsync versi 3.0.0 dan yang lebih baru. Opsi yang dijelaskan di bawah diperkenalkan dalam rilis tersebut pada tanggal 1 Maret 2008.
Bersama dengan --info=progress2 Anda juga dapat menggunakan --no-inc-recursive opsi (atau lebih pendek --no-i-r alias) untuk menonaktifkan rekursi inkremental.
Ini akan membangun seluruh daftar file di awal, daripada menemukan lebih banyak file secara bertahap saat transfer berlangsung. Karena ini akan mengetahui semua file sebelum memulai, ini akan memberikan laporan kemajuan keseluruhan yang lebih baik. Ini berlaku untuk jumlah file - ini tidak melaporkan kemajuan apa pun berdasarkan ukuran file.
Ini melibatkan pertukaran. Membuat seluruh daftar file lebih awal akan menghabiskan lebih banyak memori dan dapat menunda dimulainya transfer yang sebenarnya secara signifikan. Seperti yang Anda harapkan, semakin banyak file, semakin lama penundaan dan semakin banyak memori yang dibutuhkan.
Berikut ini dari manual rsync (sumber - http://rsync.samba.org/ftp/rsync/rsync.html ):
-r, --recursive
Ini memberitahu rsync untuk menyalin direktori secara rekursif. Lihat juga --dirs (-d). Dimulai dengan rsync 3.0.0, algoritme rekursif yang digunakan sekarang merupakan pemindaian inkremental yang menggunakan lebih sedikit memori daripada sebelumnya dan memulai transfer setelah pemindaian beberapa direktori pertama selesai. Pemindaian inkremental ini hanya memengaruhi algoritme rekursi kami, dan tidak mengubah transfer non-rekursif. Ini juga hanya mungkin jika kedua ujung transfer setidaknya versi 3.0.0.
Beberapa opsi memerlukan rsync untuk mengetahui daftar file lengkap, jadi opsi ini menonaktifkan mode rekursi inkremental. Ini termasuk:--delete-before, --delete-after, --prune-empty-dirs, dan --delay-updates. Karena itu, mode hapus default saat Anda menentukan --delete sekarang --delete-during ketika kedua ujung koneksi setidaknya 3.0.0 (gunakan --del atau --delete-during untuk meminta mode penghapusan yang ditingkatkan ini secara eksplisit). Lihat juga opsi --delete-delay yang merupakan pilihan yang lebih baik daripada menggunakan --delete-after.
Rekursi inkremental dapat dinonaktifkan menggunakan --no-inc-recursive opsi atau lebih pendek --no-i-r alias.
Lihat juga https://rsync.samba.org untuk mengetahui perbedaan versi tertentu (gulir ke bawah dan periksa tautan Rilis Berita).
Solusi 3:
Anda bisa dengan 'pv' (apt-get install pv
dengan Debian dan ubuntu). Saya merekomendasikan untuk memantau jumlah file yang ditransfer, karena jumlah data yang ditransfer tidak berkorelasi dengan ukuran file tetapi pada delta antara sumber dan tujuan. Dan menghitung file akan menghitung kemajuan yang sama untuk satu delta besar dan delta lainnya dengan delta kecil. Yang berarti bahwa estimasi ETA mungkin jauh. ETA berbasis ukuran hanya berfungsi jika tujuan Anda kosong, dalam hal ini delta ==ukuran sumber.
Ide umumnya adalah memancarkan satu baris per file 'ditransfer' dari rsync, dan menghitung baris tersebut dengan 'pv':
rsync -ai /source remote:/dest | pv -les [number of files] >/dev/null
Saya cenderung mencadangkan seluruh sistem file (karena beberapa alasan), dalam hal ini Anda dapat menggunakan df
yang jauh lebih murah untuk mendapatkan jumlah file (bukan du
atau find
yang akan melintasi hierarki sumber Anda di lain waktu setelah rsync melakukannya). Opsi -x muncul untuk memastikan rsync tetap pada sistem file sumber yang sama (dan tidak mengikuti tunggangan dalam lainnya):
rsync -aix /source remote:/dest | pv -les $(df -i /source | perl -ane 'print $F[2] if $F[5] =~ m:^/:') >/dev/null
Jika Anda ingin menghitung file di /source secara umum, gunakan find /source|wc -l
(peringatan lagi:mungkin lambat dan berat di I/O).
Solusi 4:
danakim benar. Tidak ada cara mudah untuk menambahkan indikator progres total.
Alasannya adalah ketika rsync melihat daftar file yang akan disinkronkan, rsync tidak tahu sebelumnya file mana yang perlu diubah. Jika Anda melakukan transfer delta, delta itu sendiri harus dihitung terlebih dahulu untuk memberikan gambaran total pekerjaan yang perlu dilakukan.
Dengan kata lain, cara termudah untuk menghitung berapa banyak pekerjaan yang harus diselesaikan adalah dengan benar-benar melakukannya.
Solusi 5:
Untuk transfer yang lama, saya senang menjalankan du -s
di kedua sisi. Bahkan watch -n1 du -s
, jika saya merasa sangat cemas.
watch
mengeksekusi perintah (du -s
di sini) secara berkala (setiap 1 detik di sini) dan menampilkan keluaran dalam layar penuh.