
dirOrig
異なるリモート サーバーにと の2 つのディレクトリがありますdirDest
。 どちらにも、さまざまな深さの多数のサブディレクトリがあります。 ここで、特定のファイルまたは拡張子を から に再帰的にコピーする必要があります。file1.txt
ただし、 にサブディレクトリが既に存在する場合にのみ、ファイルをコピーする必要があります。dirOrig
dirDest
dirDest
例えば、rsyncを使用して特定のファイルのみをソースから宛先に体系的にコピーすることができます。
rsync -zarv --prune-empty-dirs --include "*/" --include="file1.txt" --exclude="*" "dirOrig" "dirDest"
しかし、このコピーを宛先にあるサブディレクトリのみに制限するにはどうすればよいでしょうか(dirDest
)
答え1
私は単一のコマンドを知りませんが、私が思いついたハックは次のとおりです。
からをに
rsync
コピーするために使用しますdirOrig
server1
server2
rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"
コピーしたディレクトリのうち、使用
dirOrig
中に存在しないサブディレクトリを削除します。dirDest
comm
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 )
最後に、チェックサムに基づいてrsyncを実行
dirDest
しdirOrig
、dirOrig内の、dirDestに存在しないすべてのファイルを削除します。file1.txt
rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig