特定のファイルを再帰的に同期しますが、ターゲットに存在するサブディレクトリでのみ可能です。

特定のファイルを再帰的に同期しますが、ターゲットに存在するサブディレクトリでのみ可能です。

他のリモートサーバーには2つのディレクトリがdirOrigあります。dirDest彼らはすべて、さまざまな深さの多くのサブディレクトリを持っています。これで、特定のファイルまたは拡張子をからに再帰的にコピーする必要がありますfile1.txt。しかし、これはサブディレクトリがすでに。dirOrigdirDestdirDest

たとえば、rsync を使用して、ソースからターゲットに特定のファイルのみを体系的にコピーできます。

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

dirDestしかし、どのようにこのコピーをtarget()に存在するサブディレクトリに限定するのですか?

ベストアンサー1

どんな命令もわかりませんが、私が思いついたトリックは次のとおりです。

  1. コピーrsyncdirOrigserver1server2

    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を実行し、dirDestに存在しないdirOrigのすべてのファイルを削除しますdirDestdirOrigfile1.txt

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

おすすめ記事