Rsync:特定のサブディレクトリのみを含める(外部インクルードファイルを使用)

Rsync:特定のサブディレクトリのみを含める(外部インクルードファイルを使用)

rsyncオプションを使用していますinclude-from="external file"。それ以外は私の質問はほとんど同じです。これ

非常に特定のサブフォルダをバックアップしたいのですが、通常隠しフォルダはバックアップしたくありません。私がこれを行うことができた唯一の方法は次のとおりです。

+ home/*/.config/libreoffice/
+ home/*/.config/libreoffice/4/
+ home/*/.config/libreoffice/4/user/
+ home/*/.config/libreoffice/4/user/registrymodifications.xcu

# hide the rest ( .local, .wine, most of .config ...)
- home/*/.*/

最初の3行がない場合は、上位registrymodifications.xcuディレクトリが最後の行に「ヒット」するまで一致しないため除外されます。したがって、私の経験では、その項目を入れる必要があります。すべてホワイトリストにあります。

これよりも痛みを伴う方法はありますか?(まだすべてのバックアップルールを外部ファイルに保存したいのですが…)

答え1

コマンドラインで次の操作を行います。

rsync -ai \
    --prune-empty-dirs \
    --include='*/' \
    --include='home/*/.config/libreoffice/4/user/registrymodifications.xcu/***'
    --exclude='*' \
    "$source" "$destination"

これには、すべてのディレクトリ、registrymodifications.xcuサブディレクトリ、およびその下のすべてのファイルが繰り返し含まれているが、他のルールに明示的に含まれていないエントリは除外されます。また、--prune-empty-dirs-m)を使用します。これは、ターゲットに空のディレクトリが作成されないことを意味します。

その結果、2番目のインクルードルールに一致するファイルとディレクトリのみが実際に送信されます。

またはフィルタファイルとして:

+ */
+ home/*/.config/libreoffice/4/user/registrymodifications.xcu/***
- *

...あなたは使用します

rsync -ai \
    --prune-empty-dirs \
    --include-from=patterns \
    "$source" "$destination"

これに注目すべき点は、ルールを含む2番目の空のディレクトリを一致させることですいいえこのオプションのおかげで、ターゲット--prune-empty-dirsから作成できます。

関連情報