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

rsync-exclude: ファイル同期時に特定のファイル/ディレクトリを除外

`rsync`コマンドは、ローカルおよびリモートシステム間でファイルを効率的に同期するために使用される強力なツールです。特に、`--exclude`および`--exclude-from`オプションを使用すると、同期対象から特定のファイル、ディレクトリ、またはパターンに一致する項目を除外できます。このガイドでは、`rsync`の除外機能を中心に説明しており、不要なファイル転送を防ぎ、特定のデータのみをバックアップまたはコピーする際に非常に役立ちます。

概要

`rsync`の除外機能は、複雑なファイル同期シナリオにおいて非常に重要です。特定のログファイル、一時ファイル、バージョン管理システムのメタデータ(.git、.svn)などを同期対象から除外することで、転送時間を短縮し、対象領域を節約し、不要なデータをコピーしないようにします。

主な特徴

`rsync`の除外機能が提供する主な特徴です。

  • **パターンベースの除外**: ワイルドカード(glob)パターンを使用して、ファイル名やパスに基づいて除外できます。
  • **ファイルリストベースの除外**: 除外するパターンを別のファイルに記述して管理できます。
  • **柔軟なルール適用**: `--include`オプションと組み合わせることで、複雑な包含/除外ルールを定義できます。
  • **パフォーマンス最適化**: 不要なファイル転送を削減し、同期速度を向上させます。

主なオプション

`rsync`コマンドでファイルやディレクトリを除外するために使用される主要なオプションです。

除外ルールの指定

その他の便利なオプション

生成されたコマンド:

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

説明:

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

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

使用例

`rsync`の除外オプションを活用した実際の使用例です。

特定のファイル拡張子を除外

rsync -av --exclude='*.log' --exclude='*.tmp' /path/to/source/ /path/to/destination/

ソースディレクトリから`.log`ファイルと`.tmp`ファイルを除外して、宛先ディレクトリに同期します。

特定のディレクトリを除外

rsync -av --exclude='node_modules/' --exclude='.git/' /path/to/source/ /path/to/destination/

ソースディレクトリから`node_modules`と`.git`ディレクトリを除外して同期します。

除外リストファイルの使用

rsync -av --exclude-from=exclude_list.txt /path/to/source/ /path/to/destination/

`exclude_list.txt`ファイルに定義されたパターンを使用して、同期対象から除外します。 **exclude_list.txt の内容例:** ``` *.bak /temp_files/ logs/ ```

特定のファイルのみを含め、他はすべて除外

rsync -av --include='*.conf' --exclude='*' /path/to/source/ /path/to/destination/

デフォルトですべてのファイルを却下し、`.conf`拡張子を持つファイルのみを含めて同期します。`--include`と`--exclude`の順序が重要です。

リモートサーバーへの同期時に特定のファイルを除外

rsync -avz --exclude='.DS_Store' --exclude='cache/' /path/to/local/user@remote_host:/path/to/remote/

ローカルディレクトリの内容をリモートサーバーに同期する際に、`.DS_Store`ファイルと`cache/`ディレクトリを除外します。

ヒントと注意点

`rsync`の除外オプションを効果的に使用し、潜在的な問題を回避するためのヒントと注意点です。

パターンマッチングルールの理解

除外パターンは`rsync`のフィルタールールに従って動作します。

  • **ワイルドカード**: `*`は任意の文字列に一致し、`?`は単一の文字に一致します。`**`はディレクトリ境界を越えて一致します。
  • **パス**: パターンが`/`で始まると、ソースディレクトリのルートからの相対パスになります。`/`で終わると、ディレクトリのみに一致します。
  • **相対パス**: パターンに`/`が含まれていない場合、すべてのディレクトリレベルで一致します。例: `--exclude='temp'`は`/path/to/source/temp`と`/path/to/source/subdir/temp`の両方を除外します。

オプション順序の重要性

`--include`と`--exclude`オプションはコマンドラインに表示される順序で処理されます。したがって、特定のファイルを含めつつ残りをすべて除外したい場合は、まず`--include`を使用し、次に`--exclude='*'`を使用する必要があります。

  • `--include='*.txt' --exclude='*'`(すべての`.txt`ファイルを含め、残りは除外)
  • `--exclude='*' --include='*.txt'`(すべてのファイルを除外し、`.txt`ファイルも除外される - 意図しない結果)

テスト実行(`--dry-run`)の活用

実際に重要なデータを同期する前に、必ず`-n`または`--dry-run`オプションを使用して、期待される動作を確認してください。これは、意図しないファイルの除外や包含を防ぐのに非常に効果的です。

  • `rsync -avn --exclude='*.log' /path/to/source/ /path/to/destination/`

デバッグのための`-vv`オプション

除外ルールが期待通りに機能しない場合、`-vv`(verbose)オプションを追加すると、`rsync`がどのファイルをスキップし、どのルールによって除外されたかの詳細な情報を出力するため、デバッグに役立ちます。

  • `rsync -avv --exclude='*.bak' /path/to/source/ /path/to/destination/`

同じカテゴリのコマンド