サブディレクトリのファイルリストをリモートサーバーにrsyncし、関連性のないファイルを削除する

サブディレクトリのファイルリストをリモートサーバーにrsyncし、関連性のないファイルを削除する

私はこの質問に対する答えを見つけることができませんでした。--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使用して読み取ることができます--updatersync のマニュアルページもっと学ぶ。

おすすめ記事