LoginSignup
0
0

ディレクトリの統合や同期を行う時に便利なコマンドrsyncの使い方

Posted at

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で削除することができます。(当然ながら消したファイルは元に戻らないのでバックアップ大事 :bulb:

//dirDevで削除したファイルをdirProdにも反映
$ rsync -av --update --delete /path/to/dirDev/ /path/to/dirProd/

以上、rsyncコマンドの基本的な使い方のご紹介でした。
この他にも多数オプションがあり、本来はローカル↔リモートサーバーの同期やバックアップの作成などに使われるものらしいですね。
大量のファイルも高速に処理できて便利なコマンドなので、この機会に覚えておきたいと思います :pencil2:

参考サイト

ありがとうございます :pray: :sparkles:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0