ホーム > ファイル・ディレクトリ管理 > rsync

rsync: ファイル同期とバックアップ(--includeオプション活用)

rsyncは、ローカルおよびリモートシステム間でファイルとディレクトリを効率的に同期するための強力なユーティリティです。特に`--include`オプションを使用すると、特定のパターンに一致するファイルやディレクトリのみを同期対象に含めることができるため、複雑なバックアップやデプロイメントシナリオで非常に役立ちます。このガイドでは、rsyncの基本的な使い方とともに、`--include`オプションの活用に焦点を当てます。

概要

rsyncは、変更されたファイルのみを転送することでネットワーク帯域幅を節約し、`--include`および`--exclude`オプションを通じて転送するファイル/ディレクトリを精密に制御できます。`--include`は特定のパターンを含め、`--exclude`は特定のパターンを除外します。この2つのオプションの順序が重要です。

主な特徴

  • 増分転送:変更されたファイルのみを転送するため効率的
  • リモート同期:SSHなどを介してリモートサーバーと同期可能
  • 柔軟なフィルタリング:`--include`および`--exclude`オプションで転送対象を精密に制御
  • 属性保持:ファイル権限、所有権、タイムスタンプなど多様な属性を維持

主なオプション

rsyncの様々なオプションのうち、`--include`オプションとともに頻繁に使用される主なオプションです。

フィルタリングオプション

基本動作と効率化オプション

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`rsync` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

rsyncの`--include`オプションを活用した様々な同期シナリオの例です。

特定の拡張子のファイルのみを含めて同期

rsync -av --include='*.txt' --exclude='*' src/ dest/

現在のディレクトリの'src'フォルダから、'.txt'拡張子を持つファイルのみを'dest'フォルダに同期します。他のすべてのファイルは除外されます。

特定のディレクトリのみを含めて同期

rsync -av --include='data/***' --exclude='*' src/ dest/

'src'フォルダから'data/'ディレクトリとその中のすべての内容のみを'dest'フォルダに同期します。他のすべてのファイル/ディレクトリは除外されます。

複数のパターンを含めたり除外したりして同期

rsync -av --exclude='*.log' --include='report/***' --include='*.txt' --exclude='*' src/ dest/

'src'から'.log'ファイルは除外し、'report/'ディレクトリと'.txt'ファイルのみを'dest'に同期します。残りのファイルは除外されます。

ドライランで含め/除外ルールをテスト

rsync -avn --include='*.txt' --exclude='*' src/ dest/

実際の同期を行わずにフィルタリングルールがどのように適用されるかを確認します。このコマンドは、どのファイルが転送されるかを出力するだけです。

リモートサーバーの特定のファイルのみを取得

rsync -av --include='*.conf' --exclude='*' user@remote_host:/remote/path/ ./local/path/

リモートサーバーの'/remote/path/'から'.conf'ファイルのみをローカルの'./local/path/'に取得します。

ヒントと注意点

rsyncの`--include`および`--exclude`オプションを効果的に使用するためのヒントと注意点です。

フィルタリングルールの順序の重要性

`--include`と`--exclude`オプションは、コマンドラインに現れる順序で処理されます。最初に一致したルールが優先されます。したがって、より具体的なルールを先に、より一般的なルールを後に配置するのが一般的です。

  • 例1: `--include='specific_file' --exclude='*'` (特定のファイルのみを含め、残りは除外)
  • 例2: `--exclude='*.tmp' --include='*'` (すべてのファイルを含めるが、.tmpファイルは除外)

ワイルドカードとパターンマッチング

パターンマッチングには様々なワイルドカードを使用できます。

  • `*`: すべての文字列(ディレクトリ境界を越えない)
  • `?`: 単一の文字
  • `[chars]`: 括弧内の文字のいずれか1つ
  • `***`: ディレクトリ境界を越えるすべての文字列(再帰的マッチ)

スラッシュ(/)の意味

パターンの末尾にスラッシュがあるかないかで動作が異なる場合があります。

  • `dir/`: ディレクトリ'dir'自体とその中のすべての内容に適用されます。
  • `file_or_dir`: 名前が'file_or_dir'であるファイルまたはディレクトリの両方に適用されます。

ドライラン (`-n`) の活用

複雑なフィルタリングルールを使用する際は、常に`-n`または`--dry-run`オプションを使用して、実際の同期前に予想される結果を確認することをお勧めします。これは、意図しないファイルの削除や取り込みを防ぐために不可欠です。


同じカテゴリのコマンド