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 mendapatkan rsync
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 oleh rsync
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:
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 rsync
keluaran (difokuskan pada tanda bit):
Dalam eksperimen saya, baik --itemize-changes
bendera dan para -vvv
bendera yang diperlukan untuk mendapatkan rsync
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:
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 rsync
dialihkan 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.