Rsync フィルタ (含む/除外)

Rsync フィルタ (含む/除外)

一部のファイル/フォルダをrSyncしたいが、フィルタに問題があります。私のソースFSは次のとおりです。

.
|_ Invent/
|  |+ Comps/
|  |+ Prod/
|  |_ Other/
|_ Archive/
|  |_ Comps/
|  |_ Prod/
|  |_ Other/
|+ Comps.csv

ご存知のように、2つのディレクトリと1つのファイルを同期させたいと思います。また、ディレクトリとファイル構造を保存したいと思います。

./Invent/Comps/*
./Invent/Prod/*
./Comps.csv

次のコマンドを試しました。

rsync -avze "ssh -i key_file" 
    --include "Comps.csv" 
    --include "/Invent/Comp/*" 
    --include "/Invent/Prod/*" 
    --exclude "*" 
    /source/path/ rsync@srv:/target/path/

その結果、/source/path/でも多くのジャンクファイルが得られました。何が問題なの?

答え1

少しブレーンストーミングの終わりに正しい解決策を見つけました。

--exclude 'Archive' 
--include 'Invent/Comp/' 
--include 'Invent/Prod/' 
--exclude 'Invent/*'

答え2

インクルードと除外パターンは、コピーやコピーを避ける必要があるファイルやディレクトリがどこにあるかわからない場合、またはコマンドラインに便利にリストするには、パス名が多すぎる場合に必要です。

コピーしたいパスが何であるかを正確に知っていて、パスがあまりにも多くないため、包含パターンと包含パターンをまったく使用せずにパスを一覧表示(または)することをお勧めしますrsync-R--relative

cd /source/path || exit
rsync -av -R Invent/Comps/ Invent/Prod/ Comps.csv rsync@srv:/target/path/

ターゲットに送信されたパスが現在のディレクトリに基づいているように、まず作業ディレクトリをソースディレクトリに変更する必要があります。

関連情報