📁

ファイルの同期コマンドとしてrsyncは超便利なのでメモ

2023/10/26に公開

公式:
rsync
document

今回のフォルダ構成

+-
 + rsync_src
   - hoge.txt
 + rsync_des
 + rsync_diff

rsync_src(同期元),rsync_des(同期先),rsync_diff(差分格納先)が同じディレクトリになる構成です。

変更加えずコマンドを試す

rsync -n -av ./rsync_src/ ./rsync_des

-nオプションをつけると実行するけど実際には変更を反映しないモードになります。コマンド試す時は、まず-nをつけて、-vでログを表示させるようにすると実際に影響を与えずにコマンドのログを確認できます。

シンプルに同期をとる

rsync -av ./rsync_src/ ./rsync_des

./rsync_src/の内容を./rsync_desに同期する。-aの意味はざっくりいうと「コピー元を出来るだけそのままコピー先にコピーする」という指定です。-vはログ出力。

※ "rsync -av ./rsync_src ./rsync_des"とすると./rsync_des/rsync_srcとフォルダを作られてコピーされます。

https://download.samba.org/pub/rsync/rsync.1

-a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--recursive, -r recurse into directories
--links, -l copy symlinks as symlinks
--perms, -p preserve permissions
--times, -t preserve modification times
--group, -g preserve group
--owner, -o preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files
--verbose, -v increase verbosity

不要なファイルを削除して同期をとる

rsync -av --delete ./rsync_src/ ./rsync_des

コピー先(./rsync_des)にコピー元(./rsync_src/)に無いファイルがあった場合は削除する。コピー元とコピー先のフォルダの中身を完全に同じできる。

コピー元とコピー先の差分を取得する

rsync -av --delete --compare-dest=../rsync_des ./rsync_src/ ./rsync_diff

コピー元(./rsync_src/)とコピー先(../rsync_des)を比較して、差のあるファイルだけを./rsync_diffにコピーする。

注意として"--compare-dest="で指定するパスは差分格納先(./rsync_diff)からの相対パスになります。ですので今回はrsync_des,rsync_diffは同じディレクトリにあるのですが、"--compare-dest=../rsync_des"のように1階層戻る指定になります。

差分ファイルだけを提出する必要があったりする場合に便利。実際の運用フローとしては、

#差分を取得する
rsync -av --delete --compare-dest=../rsync_des ./rsync_src/ ./rsync_diff

#コピー元とコピー先を同期する
rsync -av --delete ./rsync_src/ ./rsync_des

という感じになるかと思います。

コピーの進捗を表示する

大容量ファイルをcpとかでコピーするとコピーの進捗とか残り時間を知りたい時があると思います。rsyncだと

rsync -av --progress コピー元 コピー先

とすれば「進捗(%)、コピー速度(kb/s)、予想残り時間」が表示されます。

参考サイト:
https://hacknote.jp/archives/14461/
https://hackers-high.com/linux/rsync-backup-part2/

Discussion