Mari kita lihat cara kerja rsync dan lebih memahami baris hasil samar:
1 - Keuntungan besar dari rsync adalah bahwa setelah gangguan, waktu berikutnya berlanjut dengan lancar.
Pemanggilan rsync berikutnya tidak akan mentransfer file lagi, yang telah ditransfer, jika tidak diubah untuk sementara. Tetapi itu akan mulai memeriksa semua file lagi dari awal untuk mengetahuinya, karena tidak menyadari bahwa itu telah terputus.
2 - Setiap karakter adalah kode yang dapat diterjemahkan jika Anda membaca bagian untuk -i, --itemize-changes
diman rsync
Mendekode file log contoh Anda dari pertanyaan:
> f.st ......
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
.d..t ......
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
> f +++++++++
> - the item is received
f - a regular file
+++++++++ - this is a newly created item
Bagian yang relevan dari halaman manual rsync:
-i, --itemize-changes
Meminta daftar perincian sederhana dari perubahan yang dibuat untuk setiap file, termasuk perubahan atribut. Ini persis sama dengan menentukan --out-format = '% i% n% L'. Jika Anda mengulangi opsi, file yang tidak diubah juga akan menjadi output, tetapi hanya jika rsync penerima paling tidak versi 2.6.7 (Anda dapat menggunakan -vv dengan versi rsync yang lebih lama, tetapi itu juga mengaktifkan output dari pesan verbose lainnya- orang bijak).
Escape "% i" memiliki keluaran samar sepanjang 11 huruf. Format umum adalah seperti string YXcstpoguax, di mana Y diganti dengan jenis pembaruan yang sedang dilakukan, X diganti dengan tipe file, dan huruf lain mewakili atribut yang mungkin dihasilkan jika diubah.
Jenis pembaruan yang menggantikan Y adalah sebagai berikut:
- A
<
berarti bahwa file sedang ditransfer ke host jarak jauh (dikirim).
- Sebuah
>
cara yang file sedang ditransfer ke host lokal (diterima).
- A
c
berarti bahwa perubahan / pembuatan lokal sedang terjadi untuk item tersebut (seperti pembuatan direktori atau perubahan symlink, dll.).
- A
h
berarti item tersebut adalah hard link ke item lain (membutuhkan --hard-links).
- A
.
berarti bahwa item tersebut tidak diperbarui (meskipun mungkin memiliki atribut yang sedang dimodifikasi).
- A
*
berarti bahwa sisa area keluaran yang diperinci berisi pesan (misalnya "menghapus").
Jenis file yang menggantikan X adalah: f
untuk file, a d
untuk direktori, L
untuk symlink, a D
untuk perangkat, dan a S
untuk file khusus (misalnya bernama soket dan fifos).
Huruf lain dalam string di atas adalah huruf sebenarnya yang akan dihasilkan jika atribut terkait untuk item tersebut diperbarui atau "." tidak ada perubahan. Tiga pengecualian untuk ini adalah: (1) item yang baru dibuat mengganti setiap huruf dengan "+", (2) item identik menggantikan titik dengan spasi, dan (3) atribut yang tidak diketahui menggantikan setiap huruf dengan "?" (ini dapat terjadi saat berbicara dengan rsync lama).
Atribut yang terkait dengan setiap huruf adalah sebagai berikut:
- A
c
berarti file biasa memiliki checksum yang berbeda (memerlukan --checksum) atau symlink, perangkat, atau file khusus memiliki nilai yang berubah. Perhatikan bahwa jika Anda mengirim file ke rsync sebelum 3.0.1, tanda perubahan ini hanya akan ada untuk file biasa yang berbeda checksum.
- A
s
berarti ukuran file biasa berbeda dan akan diperbarui dengan transfer file.
- A
t
berarti waktu modifikasi berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --times). Nilai alternatif T berarti bahwa waktu modifikasi akan diatur ke waktu transfer, yang terjadi ketika file / symlink / perangkat diperbarui tanpa --times dan ketika symlink diubah dan penerima tidak dapat mengatur waktunya. (Catatan: saat menggunakan klien rsync 3.0.0, Anda mungkin melihat flag s digabungkan dengan t alih-alih flag T yang tepat untuk kegagalan pengaturan waktu ini.)
- A
p
berarti izinnya berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --perms).
- Sebuah
o
cara pemilik berbeda dan sedang diperbarui untuk nilai pengirim (membutuhkan --owner dan hak super-user).
- A
g
berarti grup tersebut berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --group dan otoritas untuk mengatur grup).
- The
u
Slot dicadangkan untuk penggunaan masa depan.
- The
a
berarti bahwa informasi ACL berubah.
- The
x
berarti bahwa informasi atribut diperpanjang berubah.
Satu keluaran lain dimungkinkan: saat menghapus file, "% i" akan mengeluarkan string "* menghapus" untuk setiap item yang sedang dihapus (dengan asumsi bahwa Anda sedang berbicara dengan rsync yang cukup baru yang mencatat penghapusan daripada mengeluarkannya sebagai pesan verbose).
Beberapa waktu yang lalu, saya perlu memahami
rsync
output untuk skrip yang saya tulis. Selama proses penulisan skrip itu, saya mencari-cari di Google dan sampai pada apa yang telah ditulis @mit di atas . Saya menggunakan informasi itu, serta dokumentasi dari sumber lain, untuk membuat primer saya sendiri pada bendera bit dan bagaimana cara mendapatkanrsync
keluaran bendera bit untuk semua tindakan (tidak melakukan ini secara default).Saya memposting informasi itu di sini dengan harapan dapat membantu orang lain yang (seperti saya) tersandung di halaman ini melalui pencarian dan membutuhkan penjelasan yang lebih baik
rsync
.Dengan kombinasi dari
--itemize-changes
bendera dan para-vvv
bendera,rsync
memberi kita rinci output dari semua perubahan file sistem yang diidentifikasi dalam direktori source jika dibandingkan dengan direktori target. Bendera bit yang dihasilkan olehrsync
kemudian dapat diterjemahkan untuk menentukan apa yang berubah. Untuk memecahkan kode arti setiap bit, gunakan tabel berikut.Penjelasan setiap posisi bit dan nilai dalam
rsync
output:Beberapa contoh keluaran dari rsync untuk berbagai skenario:
Menangkap
rsync
keluaran (difokuskan pada tanda bit):Dalam eksperimen saya, baik
--itemize-changes
bendera dan para-vvv
bendera yang diperlukan untuk mendapatkanrsync
output entri untuk semua perubahan sistem file. Tanpa-vvv
flag triple verbose ( ), saya tidak melihat perubahan direktori, tautan, dan perangkat terdaftar. Perlu bereksperimen dengan versi rsync Anda untuk memastikan bahwa itu mengamati dan mencatat semua yang Anda harapkan.Salah satu kegunaan praktis dari teknik ini adalah menambahkan
--dry-run
flag ke perintah dan mengumpulkan daftar perubahan, seperti yang ditentukan oleh rsync, ke dalam variabel (tanpa membuat perubahan apa pun) sehingga Anda dapat melakukan pemrosesan sendiri pada daftar. Sesuatu seperti berikut ini akan menangkap keluaran dalam variabel:Dalam contoh di atas, output (stdout) dari
rsync
dialihkan kegrep
(melalui stdin) sehingga kita hanya dapat mengisolasi baris yang berisi flag bit.Memproses keluaran yang ditangkap:
Isi variabel kemudian dapat dicatat untuk digunakan nanti atau segera diulang untuk item yang menarik. Saya menggunakan taktik yang tepat ini dalam skrip yang saya tulis selama meneliti lebih lanjut
rsync
. Anda dapat melihat skrip ( https://github.com/jmmitchell/movestough ) untuk contoh pasca-pemrosesan output yang ditangkap untuk mengisolasi file baru, file duplikat (nama yang sama, konten yang sama), benturan file (nama yang sama, berbeda konten), serta perubahan struktur subdirektori.sumber
1) Wodin, itu tidak sepenuhnya benar. Jika menggunakan --pihak atau -P tag (sama seperti --pihak --progress) rsync melanjutkan transfer yang terputus.
2) Tepatnya, itu adalah keluaran umum untuk tag --itemize-changes.
sumber
1.) Ini akan "memulai ulang sinkronisasi", tetapi tidak akan mentransfer file dengan ukuran dan stempel waktu yang sama, dll. Pertama-tama membuat daftar file yang akan ditransfer dan selama tahap ini akan terlihat bahwa ia telah mentransfer beberapa file dan akan melewatkannya. Anda harus memberi tahu rsync untuk mempertahankan stempel waktu dll. (Mis. Menggunakan
rsync -a ...
)Saat rsync mentransfer file, itu akan menyebutnya seperti itu,
.filename.XYZABC
bukanfilename
. Kemudian setelah selesai mentransfer file itu, itu akan mengganti namanya. Jadi, jika Anda mematikan rsync saat sedang mentransfer file besar, Anda harus menggunakan opsi --pihak untuk melanjutkan transfer alih-alih memulai dari awal.2.) Saya tidak tahu apa itu. Bisakah Anda menempelkan beberapa contoh?
EDIT: Sesuai http://ubuntuforums.org/showthread.php?t=1342171 kode-kode tersebut ditentukan di halaman manual rsync di bagian
-i, --itemize-changes
opsi.Memperbaiki bagian jika jawaban saya berdasarkan Joao
sumber