Saya sudah mencari opsi ini, tetapi hanya menemukan solusi yang melibatkan patching kustom . Fakta bahwa itu tidak muncul di --help dan tidak ada info lagi yang dapat ditemukan mungkin menunjukkan jawabannya adalah 'tidak', tetapi saya ingin melihat ini dikonfirmasi.
Apakah mungkin untuk menunjukkan kemajuan total transfer file dengan rsync?
Jawaban:
danakim benar. Tidak ada cara sepele untuk menambahkan indikator kemajuan total.
Alasannya adalah ketika rsync melihat daftar file yang akan disinkronkan, ia tidak tahu sebelumnya file mana yang perlu diubah. Jika Anda melakukan transfer delta, delta itu sendiri harus dihitung sebelumnya untuk memberikan gambaran total tentang pekerjaan yang perlu dilakukan.
Dengan kata lain, cara termudah untuk menghitung berapa banyak pekerjaan yang harus dilakukan adalah benar-benar melakukannya.
sumber
--size-only
atau sejenisnya lebih lanjut tidak akurat.Sekarang ada cara resmi untuk melakukan ini di rsync (protokol versi 3.1.0 versi 31, Diuji dengan Ubuntu Trusty 14.04).
Saya mencoba dengan
/usr
folder saya karena saya ingin fitur ini untuk mentransfer seluruh sistem file, dan/usr
tampaknya menjadi sampel representatif yang baik.Ini
--info=progress2
memberikan persentase keseluruhan yang bagus, bahkan jika itu hanya nilai parsial. Bahkan,/usr
folder saya lebih dari 6 pertunjukan:dan
rsync
butuh banyak waktu untuk memindai semuanya. Jadi hampir sepanjang waktu persentase yang saya lihat adalah sekitar 90% selesai, tetapi tetap menyenangkan untuk melihat bahwa ada sesuatu yang sedang disalin :)Referensi:
sumber
--info=progress2
tidak bekerja dengan-v
--no-i-r
saklar juga, jadirsync
jangan memindai secara bertahap tetapi sepenuhnya sebelum menyalin dan tahu + menampilkan berapa banyak pekerjaan yang tersisa.--human-readable
(atau-h
) untuk melihat ukuran total dalam MB / GB .. sedang berlangsung.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 yang lainnya dengan delta kecil. Yang berarti bahwa dalam hal apa pun estimasi ETA mungkin jauh. ETA berbasis ukuran hanya berfungsi jika tujuan Anda kosong, dalam hal ini delta == ukuran sumber.Gagasan umum adalah memancarkan satu baris per file 'ditransfer' dari rsync, dan hitung baris-baris itu dengan 'pv':
Saya cenderung membackup seluruh filesystem (karena beberapa alasan), dalam hal ini Anda dapat menggunakan yang jauh lebih murah
df
untuk mendapatkan jumlah file (daripadadu
ataufind
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 mount dalam lainnya):Jika Anda ingin menghitung file dalam / sumber secara umum, gunakan
find /source|wc -l
(peringatan lagi: mungkin lambat dan berat pada I / O).sumber
df -i /source
mendapat jumlah inode (file) dari semua partisi di mana / sumber berada. Kalau tidak gunakan 'temukan' untuk menghitung file di dalam direktori di dalam ekspresi "$ ()".du
ataufind
- katakanlah Anda sedang menyelesaikan salinan yang tidak lengkap atau melakukan pembaruan di tempat dengan penghapusan - adalah menggunakanrsync -ai --dry-run
untuk mendapatkan daftar file yang sama dengan yang akan dilalui oleh proses utamapv
Hal berikut ini berlaku untuk rsync versi 3.0.0 dan lebih tinggi. Opsi yang dijelaskan di bawah ini diperkenalkan dalam rilis itu pada 1 Maret 2008.
Bersamaan dengan --info = progress2 Anda juga dapat menggunakan opsi --no-inc-recursive (atau lebih pendek --no-ir ) untuk menonaktifkan rekursi tambahan.
Ini akan membangun seluruh daftar file di awal, daripada secara bertahap menemukan lebih banyak file saat transfer berlangsung. Karena ia akan mengetahui semua file sebelum memulai, itu akan memberikan laporan yang lebih baik dari keseluruhan kemajuan. Ini berlaku untuk jumlah file - tidak melaporkan kemajuan berdasarkan ukuran file.
Ini melibatkan trade-off. Membangun seluruh daftar file sebelumnya lebih banyak memori-mahal dan secara signifikan dapat menunda dimulainya transfer yang sebenarnya. Seperti yang Anda harapkan, semakin banyak file yang ada, semakin lama penundaan akan terjadi dan semakin banyak memori yang dibutuhkan.
Berikut ini dari manual rsync (sumber - http://rsync.samba.org/ftp/rsync/rsync.html ):
Lihat juga https://rsync.samba.org untuk perbedaan versi tertentu (gulir ke bawah dan lihat tautan Berita Rilis).
sumber
Untuk transfer yang lama, saya senang berlari
du -s
di kedua sisi. Bahkanwatch -n1 du -s
, jika saya merasa sangat cemas.watch
mengeksekusi perintah (didu -s
sini) secara berkala (setiap 1 detik di sini) dan menampilkan layar penuh output.sumber
watch
perintahnya!Pada dasarnya tidak. Anda hanya dapat menunjukkan kemajuan per file dengan flag --progress, tetapi hanya itu saja.
Saya kira Anda dapat menulis pembungkus di sekitarnya atau menggunakan salah satu tambalan yang sudah Anda temukan tetapi Anda harus bertanya pada diri sendiri apakah itu benar-benar layak, apakah Anda benar-benar membutuhkan kemajuan total untuk rsync?
sumber
--progress
kerja menggunakan--info=progress2
, itu akan menunjukkan kepada Anda kemajuan global. Anda perlu menonaktifkan algoritme rekursif tambahan agar bermanfaat, jadi--info=progress2 --no-inc-recursive
Saya menggunakan jawaban dari zerodeux dan menulis skrip bash kecil saya sendiri:
sumber
Saya juga mencari cara untuk menunjukkan kemajuan total dengan rsync dan saya telah menemukan penjawab yang berguna dari pos ini: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
Pada dasarnya, Anda dapat menggunakan --info = progress2 dalam versi dev dari rsync 3.1.0 . Inilah yang dikatakan dokter :
sumber
--info=name0
adalah emas 🌈👑Saya menggunakan jawaban dari zerodeux dan menulis skrip BASH kecil saya sendiri:
Saya mengubah TODO dry-run menjadi
Ia menemukan jumlah file sangat cepat!
sumber
find
hanya berfungsi jika Anda menggunakanrsync
secara lokal.rsync --dry-run
bekerja dengan sumber jarak jauh juga ...Jika Anda tidak memiliki rsync terbaru (mis. OS X memiliki 2.6.9) dan tidak dapat digunakan
--info=progress2
, berikut ini alternatif lain untuk menyelamatkan diri Anda dari halaman-halaman teks yang sedang bergulir:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Itu akan mencetak, pada satu baris, nama file terbaru yang ditransfer:
Transferring: the-latest.file
sumber
Menggunakan
Untuk melihat file apa yang rsync saat ini telah terbuka (akan menampilkan file) rsync salinan ke file yang tersembunyi secara lokal
sumber
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
tetapi solusi Anda lebih sederhana.Saya akan membuat komentar ini tetapi tidak memiliki reputasi yang cukup. Menanggapi komentar naught101 untuk jawaban yang dipilih, opsi --progress menunjukkan berapa banyak file yang telah ditransfer dari jumlah total yang ditransfer. Saya tidak menyadarinya sampai melihat posting ini dan melihat output dengan lebih hati-hati.
Stat 'to-check' menunjukkan berapa banyak file yang tersisa dari total. Ini paling banyak digunakan saat rsync'ing ke tujuan baru sehingga Anda tahu semua file akan sepenuhnya disalin.
Dari halaman manual:
sumber
Perhatikan peringatan di sini bahwa bahkan --info = progress2 tidak sepenuhnya dapat diandalkan karena persentase ini didasarkan pada jumlah file yang diketahui 'rsync' pada saat kemajuan ditampilkan. Ini belum tentu jumlah total file yang perlu disinkronkan (misalnya, jika ia menemukan sejumlah besar file besar di direktori yang sangat bersarang). Salah satu cara untuk memastikan bahwa --info = progress2 tidak 'melompat kembali' dalam indikasi kemajuan adalah dengan memaksa rsync untuk memindai semua direktori secara rekursif sebelum memulai sinkronisasi (alih-alih perilaku standarnya melakukan pemindaian rekursif bertahap), dengan juga menyediakan opsi --no-inc-rekursif. Namun perlu dicatat bahwa opsi ini juga akan meningkatkan penggunaan memori rsync dan run-time.
sumber
--no-inc-recursive
opsi atau--no-i-r
alias lebih pendek . (Lihat jawaban lain)Saya menggunakan skrip yang mengekstrak informasi dari / proc // io untuk proses rsync (atau proses lainnya dalam hal ini) dan mengetahui jumlah total yang akan ditransfer adalah menghitung kemajuan.
sumber
Jika versi
rsync
Anda tidak menerima--info=progress2
opsi, Anda dapat menggunakantqdm
:Untuk memasang:
Menggunakan:
sumber
Mungkin Anda bisa menggabungkan
pv
dengan rsync. Terutama parameter--size
bisa dengan membantu. Melihat pada dokumen, sesuatu sepertipv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
harusnya berfungsi.Di sini Anda akan menemukan dokumen dan perangkat lunak.
Belum mencoba ini sendiri.
sumber
Mungkin agak terlambat di sini, tetapi para pencari jawaban di masa depan mungkin akan mendapat manfaat.
Ini menggangguku juga, jadi kupikir aku akan turun dan kotor dan menulis skrip pertamaku. Paket zenity harus diinstal (sudo apt-get install zenity), tapi saya yakin itu mungkin sudah ada di sana. Juga, saya menggunakan wmctrl (kontrol manajer jendela) untuk mengubah judul dialog progres ketika selesai, mudah diinstal tetapi tidak akan membuat perbedaan jika Anda tidak. Saya hanya ingin melihat ketika selesai di panel saya.
Script pada dasarnya meminta direktori sumber dan tujuan, menghitung persentase tujuan di atas sumber dalam ukuran menggunakan du dan menampilkan bilah kemajuan.
Catatan: Ini hanya berfungsi untuk sinkronisasi direktori / file lengkap (saya biasanya menggunakannya untuk membuat cadangan apt cache), jadi tidak ada opsi --exclude = / file / in / Source-direktori. Juga tidak akan berfungsi jika ada file / direktori di direktori Tujuan tidak di direktori sumber. Saya tidak yakin apakah itu berfungsi untuk sumber / tujuan yang jauh karena tidak pernah saya membutuhkannya atau sumber daya untuk mengujinya.
PS. Skrip ini mungkin ditulis dengan sangat buruk atau sangat tidak efisien, (skrip-perawan di sini), tetapi setidaknya ini sesuai dengan tujuannya dan tentu saja Anda dapat mengedit dan memperbaikinya sesuai dengan kebutuhan Anda. PSS. Juga, tidak bisa mendapatkan tombol batal untuk membunuh rsync jadi saya baru saja menghapusnya.
sumber