Linuxでディレクトリをインテリジェントに同期するにはどうすればよいですか?


0

Linuxシステムに同期したい2つのディレクトリがあります。これらのディレクトリの内容のほとんどは同じですが、一部のファイルは異なります。

ディレクトリAに含まれるもの:

File 1
File 2
File 4
File 5

ディレクトリBに含まれるもの:

File 1
File 2
File 3
File 5

同期後、ディレクトリAとディレクトリBの両方に次のものを含める必要があります。

File 1
File 2
File 3
File 4
File 5

これは一例です。実際のディレクトリには数千のファイルが含まれ、そのサイズは数GBです。

Linuxでこれを行うにはどうすればよいですか?

更新:ファイル1、2、4、5がディレクトリAではなく、ディレクトリAにあるサブディレクトリAAにある場合はどうなりますか?ディレクトリBのファイルは同じままです。同期した後、ファイル1、2、5の複数のコピーになりたくありません。


rsync、使用しないことを確認します--deleteか?
Dirkt

回答:


1

あなたが欲しいのはrsync

$ cd -- "$(mktemp --directory)
$ mkdir A B
$ touch A/File\ {1,2,4,5}
$ touch B/File\ {1,2,3,5}
$ rsync -a A/ B
$ rsync -a B/ A
$ ls A B
A:
'File 1'  'File 2'  'File 3'  'File 4'  'File 5'

B:
'File 1'  'File 2'  'File 3'  'File 4'  'File 5'

rsyncディレクトリの同期に必要なファイルのみを転送します。他の* nixツールとは異なり、最初のディレクトリ名の後のスラッシュは重要です- ディレクトリ自体ではなくソースディレクトリの内容をコピーする必要があることを示します。


ファイル1、2、4、5がディレクトリAではなく、ディレクトリAにあるサブディレクトリAAにある場合はどうなりますか?ディレクトリBのファイルは同じままです。同期した後、ファイル1、2、5の複数のコピーになりたくない 重複を防ぐために同期されたファイルをハッシュするオプションが機能するはずです。
アレックス

1
同じ内容のA / AA / 1とB / 1があり、1をコピーしたくない場合どうですか?もしそうなら、それは元のものとは全く異なる問題です。
l0b0

はい。ファイル1がAとBの両方にあることを確認したいだけです(A / 1またはA / subdir / 1でも構いません)。AとBの両方にある限り問題ありません。あなたが言ったようにA / AA / 1とB / 1がある場合、rsyncはA / 1とB / AA / 1を作成しますが、A / 1とA /の両方としてAにファイル1があるため、不要ですAA / 1およびBのB / 1およびB / AA / 1。これは冗長です。これが複雑でまったく異なる問題である場合、新しい質問を作成します。
アレックス

0

両方のディレクトリが同じレベルにあるAと仮定しBます

$ rsync -a A/ B/ & rsync -a B/ A/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.