rsyncルールは、長いパスの特定のサブディレクトリのみを同期します。

rsyncルールは、長いパスの特定のサブディレクトリのみを同期します。

/home/xディレクトリ内の次のコンテンツのみをバックアップするために、複雑なrsync include / excludeを実行しようとしています。

  • 再帰的にすべてのファイル/ディレクトリDocuments
  • 再帰的にすべてのファイル/ディレクトリ.PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases/

除外ルールを使用する前に、すべての親ディレクトリを必須ディレクトリに含める必要があることに注意してください。ただし、以下のルールファイルに示すように、この設定は非常に非効率的であり、ルールファイルを完全に複雑にするため、読みにくくなります。

+ Documents
+ Documents/**
+ .PlayOnLinux
+ .PlayOnLinux/wineprefix
+ .PlayOnLinux/wineprefix/evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c
+ .PlayOnLinux/wineprefix/evernote/drive_c/users
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases/**
- *

ここのすべてが期待どおりに動作します。しかし、元のディレクトリ構造を維持しながら、長いパスにある特定のサブディレクトリの内容だけをrsyncバックアップするより良い効率的な方法はありますか?

編集する含めるサブディレクトリ名を個別に定義することなく、3つのアスタリスクを使用して1レベルの深さのサブディレクトリコンテンツを含めることができることがわかりました(たとえば、上記のルールの2つの関連+ Documents/***行を置き換えること)。ただし、これは1つ以上のレベルのサブディレクトリでは機能しないようです。この質問の場合です。

答え1

rules="+ /Documents/**
+ /.Play...bases/**
+ */
- *"

echo $rules | rsync -rm -f ". -" --delete-excluded /home/x /dest

関連情報