Beberapa waktu yang lalu, saya perlu memahami rsyncoutput 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 mendapatkan rsynckeluaran 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-changesbendera dan para -vvvbendera, rsyncmemberi kita rinci output dari semua perubahan file sistem yang diidentifikasi dalam direktori source jika dibandingkan dengan direktori target. Bendera bit yang dihasilkan oleh rsynckemudian dapat diterjemahkan untuk menentukan apa yang berubah. Untuk memecahkan kode arti setiap bit, gunakan tabel berikut.
Penjelasan setiap posisi bit dan nilai dalam rsyncoutput:
YXcstpoguax path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
|| changed value (for symlinks, devices, and special files)
|╰---------- the file type:
| f: for a file,
| d: for a directory,
| L: for a symlink,
| D: for a device,
| S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
<: file is being transferred to the remote host (sent)
>: file is being transferred to the local host (received)
c: local change/creation for the item, such as:
- the creation of a directory
- the changing of a symlink,
- etc.
h: the item is a hard link to another item (requires
--hard-links).
.: the item is not being updated (though it might have
attributes that are being modified)
*: means that the rest of the itemized-output area contains
a message (e.g. "deleting")
Beberapa contoh keluaran dari rsync untuk berbagai skenario:
>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/
Menangkap rsynckeluaran (difokuskan pada tanda bit):
Dalam eksperimen saya, baik --itemize-changesbendera dan para -vvvbendera yang diperlukan untuk mendapatkan rsyncoutput entri untuk semua perubahan sistem file. Tanpa -vvvflag 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-runflag 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:
file_system_changes=$(rsync --archive --acls --xattrs \
--checksum --dry-run \
--itemize-changes -vvv \
"/some/source-path/" \
"/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')
Dalam contoh di atas, output (stdout) dari rsyncdialihkan ke grep(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.