特定のファイルを再帰的に同期しますが、宛先に存在するサブディレクトリのみ同期します。

特定のファイルを再帰的に同期しますが、宛先に存在するサブディレクトリのみ同期します。

dirOrig異なるリモート サーバーにと の2 つのディレクトリがありますdirDest。 どちらにも、さまざまな深さの多数のサブディレクトリがあります。 ここで、特定のファイルまたは拡張子を から に再帰的にコピーする必要があります。file1.txtただし、 にサブディレクトリが既に存在する場合にのみ、ファイルをコピーする必要があります。dirOrigdirDestdirDest

例えば、rsyncを使用して特定のファイルのみをソースから宛先に体系的にコピーすることができます。

rsync -zarv  --prune-empty-dirs --include "*/"  --include="file1.txt" --exclude="*" "dirOrig" "dirDest"

しかし、このコピーを宛先にあるサブディレクトリのみに制限するにはどうすればよいでしょうか(dirDest

答え1

私は単一のコマンドを知りませんが、私が思いついたハックは次のとおりです。

  1. からをにrsyncコピーするために使用しますdirOrigserver1server2

    rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

  2. コピーしたディレクトリのうち、使用dirOrig中に存在しないサブディレクトリを削除します。dirDestcomm

    comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

  3. 最後に、チェックサムに基づいてrsyncを実行dirDestdirOrig、dirOrig内の、dirDestに存在しないすべてのファイルを削除します。file1.txt

    rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

関連情報