少し前に、rsync
私が書いているスクリプトの出力を理解する必要がありました。スクリプト私の周りGoogleで検索して@mitが書かれていたものになったことを書いているプロセス中の上。その情報と他のソースからのドキュメントを使用して、ビットフラグとrsync
すべてのアクションのビットフラグを出力する方法を独自に作成しました(デフォルトではこれを行いません)。
私はその情報をここに投稿しています。これは、(私のような)検索でこのページに出くわし、のより良い説明が必要な他の人に役立つことを期待していますrsync
。
組み合わせで--itemize-changes
旗と-vvv
旗、rsync
私たちのターゲットディレクトリと比較すると、ソースディレクトリに同定されたすべてのファイルシステムの変更の詳細な出力を提供します。によって生成されたビットフラグをrsync
デコードして、何が変更されたかを判別できます。各ビットの意味をデコードするには、次の表を使用してください。
rsync
の出力の各ビット位置と値の説明:
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")
さまざまなシナリオでのrsyncの出力例:
>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/
rsync
の出力のキャプチャ(ビットフラグに焦点を当てています):
私の実験では、両方の--itemize-changes
フラグと-vvv
フラグを取得するために必要なrsync
出力にのエントリのすべてのファイルシステムの変更を。トリプル冗長(-vvv
)フラグがないと、ディレクトリ、リンク、デバイスの変更が一覧表示されませんでした。ご使用のバージョンのrsyncを試して、それが期待どおりのすべてを監視および記録していることを確認してください。
この手法の便利な使用法の1つは--dry-run
、コマンドにフラグを追加し、rsyncによって決定された変更リストを(変更を加えずに)変数に収集して、リストに対して何らかの処理を行うことです。次のようなものは、変数に出力をキャプチャします。
file_system_changes=$(rsync --archive --acls --xattrs \
--checksum --dry-run \
--itemize-changes -vvv \
"/some/source-path/" \
"/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')
上記の例では、からの(stdout)出力rsync
はgrep
(stdinを介して)にリダイレクトされるため、ビットフラグを含む行のみを分離できます。
キャプチャされた出力の処理:
変数の内容は、後で使用するためにログに記録したり、関心のある項目に対してすぐに繰り返し処理したりできます。私はこの詳細な戦術を、についての調査中に書いたスクリプトで使用していますrsync
。スクリプト(https://github.com/jmmitchell/movestough)を見て、キャプチャされた出力を後処理して、新しいファイル、重複ファイル(同じ名前、同じ内容)、ファイルの衝突(同じ名前、異なる)を分離する例を確認できます。内容)、およびサブディレクトリ構造の変更。