ファイル同期のためのrsyncで使うオプション

2024/9/18 [23:46:22] (水) 天気

仕事で使っているchromebook2台でスクリプトファイル類を同期しておきたい。

そのためにメイン機から更新のあった(タイムスタンプが新しい)ものだけをコピーしたい。


てな時にlinuxだとrsyncが便利。

scpやsftpもあるけどscpもsftpもタイムスタンプを比較できないっぽいので、今回のような場合はrsync一択。

unix系ツールの例に漏れず、rsyncもオプションが豊富ですぐにわけわからなくなってるんで、自分の使う範囲のオプションをメモ。


rsync --include="*.pl" --include="*.pm" --exclude="*" -auv -e "ssh -p 10022" [ローカルディレクトリ] ユーザー名@192.168.0.NN:[リモートディレクトリ]

--incluce="*.pl"

--incluce="*.pm"

同期したい対象ファイルは拡張子が「pl」か「pm」

--exclude="*"

includeしたもの以外は同期対象外

↑これがわかりにくくて、includeとexcludeの順番がだいじ。

まず、対象を指定して、最後にそれ以外全部除外という命令になっている、らしい。


-a

以下全部をまとめて指定

・ディレクトリを再帰的に処理する

・シンボリックリンクをシンボリックリンクのままコピーする

・パーミッションを保持する

・タイムスタンプを保持する

・所有グループをそのまま保持する

・所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)

・デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当


-u

・更新のあったものだけをコピーする


-v

・転送状況を表示する


-e "ssh -p 10022"

・sshで接続する。ポート番号指定つき


わたしの場合は、以上で意図通りに同期される。実際にrsyncを走らせる前に

-n--dry-run

↑このふたつは、どちらもrsyncを走らせるけど、実際はコピーをしない。コマンドが意図したものになっているか確認するために使うオプション。


--delete

↑コピー元になくて、コピー先だけあるファイルを削除するオプション。deleteから始まるオプションはあぶないのでよっぽどのことがない限り使わない。


rsyncコマンドはコピー元、リモートのコピー先、両方に必要。

(リモートにインストールしてなくて、コマンドが見つかりませんとハマったのは内緒)


ローカルにあるディレクトリごと、USBメモリなんかに同期させるだけなら


from=/mnt/chromeos/removable/USBDrive/_works
to=/mnt/chromeos/removable/_TMP/_works
if [ -d $from ] && [ -d $to ]; then
   rsync -anu --delete --log-file=$to/rsync2usb-works.log $from/ $to/
fi

バックアップというより、持ち出して作業する一時的な扱いなので、こういうのは「--delete」をつけて、ローカルにないファイル・ディレクトリはUSBから削除してくれるので便利…でも、くれぐれも「delete」は要注意


[09/19 00:26:35]追記

ディレクトリ指定に注意が必要だった。

ローカルdir1/ リモートdir1

「/」がついてると、ローカルdir1に配置されているファイルがリモートdir1のファイルと同期される。

ローカルdir1 リモートdir1

「/」がついてないと、「リモートdir1/ローカルdir1」とローカルdir1がディレクトリごとリモートdir1の下にコピーされる。

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】