gitを使うべきなのは百も承知なのですが、わけあって↓のような流れで作業する機会があったのでメモ
状況
dirDev
←開発用のデータが入ったディレクトリ(コピー元)
dirProd
←本番用のデータが入ったディレクトリ(コピー先)
があるとします。
dirDevを編集して開発→確認OK!となった場合、編集した分だけdirProdに反映したい、一部の開発用のファイルなどを除外して同期したい、みたいな状態。
基本:ディレクトリの統合と更新
コピー元dirDev
で編集したファイルの変更をコピー先dirProd
に反映(上書き保存)、新規追加したファイルをそのまま追加したい場合
$ rsync -av --update /path/to/dirDev/ /path/to/dirProd/
パスの最後のスラッシュをつけ忘れると違った挙動になってしまうので注意
各オプションの説明
-a
アーカイブモードで同期を行います。再帰的にディレクトリをコピーし、パーミッションや所有者などの属性情報を保持します。
-v
詳細モードで同期を行います。コピーされるファイルやディレクトリの名前を表示します。
--update
更新されたファイルのみをコピーします。コピー元とコピー先のファイルのタイムスタンプを比較し、コピー元のファイルの方が新しい場合にのみコピーが実行されます。
特定のファイルやディレクトリを除外して処理したい
コピー元dirDev
とコピー先dirProd
双方にあるけど更新(上書き)したくないファイル、処理を無視したいディレクトリなどを--exclude
オプションで除外できます。
//test.txtとnode_modules内すべてのファイルを無視
$ rsync -av --update --exclude=test.txt --exclude='node_modules/*' /path/to/dirDev/ /path/to/dirProd/
コピー元で削除されたファイルをコピー先でも削除したい
--delete
オプションを使うことでコピー元dirDev
に存在しないファイルをコピー先dirProd
で削除することができます。(当然ながら消したファイルは元に戻らないのでバックアップ大事 )
//dirDevで削除したファイルをdirProdにも反映
$ rsync -av --update --delete /path/to/dirDev/ /path/to/dirProd/
以上、rsyncコマンドの基本的な使い方のご紹介でした。
この他にも多数オプションがあり、本来はローカル↔リモートサーバーの同期やバックアップの作成などに使われるものらしいですね。
大量のファイルも高速に処理できて便利なコマンドなので、この機会に覚えておきたいと思います
参考サイト
ありがとうございます