私はこの質問に対する答えを見つけることができませんでした。--include
、、、--exclude
およびソースディレクトリのさまざまな組み合わせを試しました-r
。--delete-excluded
これが私が達成したいものです:
ソースコードディレクトリ:
Dir1/File1-1 Dir1/File1-2 Dir2/File2-1 Dir2/File2-2 Dir2/File2-3 Dir3/File3-1 Dir3/File3-2 Dir3/File3-3 ...
ターゲットディレクトリ:(
ステータス不明)
私が望むのは、ソースディレクトリに事前定義されたファイルサブセットと相対パスを提供し、それをリモートターゲットと同期して、ターゲットからファイルサブセット(ディレクトリを含む)以外のすべてのエントリを削除することです。
たとえば、上記のソースディレクトリは次のとおりです。
私の定義済みファイルのリスト:
Dir1/File1-2 Dir3/File3-3
ターゲットディレクトリ:
Dir1/File1-1 Dir1/File1-2 Dir2/File2-1 Dir3/File3-1
完了すると、ターゲットにDir1 / File1-2、Dir3 / File3-3のみが含まれ、Dir2は含まれません。また、Dir1 / File1-2を再コピーしたくありません。
指示:
- これは非常に大きなファイルなので、不要なときにリモートで再コピーされるのを防ぐために努力しています。
- ソースサブディレクトリの内容は毎日変更されます。
- 事前定義されたリストは毎日変更されますが、昨日のリストのファイルを含めることもできます。
- ソースディレクトリに0個のファイルがあります。同期に必要なファイルを含むサブディレクトリのみが含まれます。
- ソースコード内のサブディレクトリはかなり静的です。つまり、Dir1、Dir2、Dir3は常に存在します。
私は私が探している解決策を見つけることができるかどうか努力し続けます。
修正する:
まず感謝したいです。jw013フォーマット変更のため。ヘルプガイドに従いましたが、フォーマットが正しくない理由を理解できません(最初のポスター)。
次のおすすめを使用してください。サージ、次のコマンドを思いついたが、まだファイルリストにないターゲットから不要なファイルを削除できませんでした。
注文する
rsync -avRP --prune-empty-dirs --delete-delay --ignore-existing $FILE_LIST destination/
答え1
以下を使用してこれを実行できます。
rsync -av --delete --update --include-from=LISTFILE -f 'hide,! */' src/ dst
その中には、LISTFILE
ターゲットディレクトリに同期する必要があるすべてのファイルを含むファイルがあります。ファイルが変更されていない場合は、を--ignore-existing
使用して読み取ることができます--update
。rsync のマニュアルページもっと学ぶ。
答え2
ファイルがソースにない場合は、rsync でさまざまな削除オプションを使用して、ターゲットからファイルを削除できます。
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
また、以下を--ignore-existing
使用してターゲットにあるファイルのコピーをスキップすることもできます。
--ignore-existing skip updating files that exist on receiver
空のディレクトリを削除するには、次のものを使用する必要があります。
-m, --prune-empty-dirs prune empty directory chains from file-list
だからコマンドは
rsync -av --prune-empty-dirs --delete-delay --ignore-existing src/ dst
私はあなたが探していることを行うと思います
答え3
私はあなたが注意を払う必要があると思います--delete-excluded
。ローカルで試してみましたが、必要に応じて機能しているようです。最初に頑張ります
rsync -a --delete-excluded --include-from=LISTFILE --exclude="*" src/ dst
なぜ特定の他のオプションが提案されているのか分かりません。 P. 最も「興味深い」事はです--ignore-existing
。より使い慣れた最適化を最初に理解することをお勧めし-a
ます-u
。
すでにこれを使っているようです-a
。つまり-t
、基本的にrsyncを最適化できるという意味です。 「Rsyncは、デフォルトでサイズまたは最後の変更時間が変更されたファイルを検索する「クイックチェック」アルゴリズムを使用して、転送する必要があるファイルを見つけます。そうでない場合は、通常、「または-受信機で最新のファイルをスキップする」を-a
使用できます。-u
--update
「クイックチェック」最適化で差を測定したい場合障害のある、あなたはそれを使用することができます--checksum
。 (破損した場合は、特定の時点ですべての既存のファイルを強制的に再同期したい場合にも役立ちます。有効にすると、どの-v
ファイルを再作成する必要があるかを確認できます。)