rsyncを使用して2つのディレクトリとそのファイルの内容を比較し、それを新しい空のディレクトリに転送したいと思います。だから私は小さなPOCを作りました。
OLD/
...main.js
NEW/
...main.js
CHANGES/
NEWとOLDのmain.jsファイルは同じで、同じチェックサムを持ちます。しかし、私が使用するとき:
rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/
main.jsファイルはまだCHANGESフォルダにコピーされます。これが起こらないようにするにはどうすればよいですか?チェックサムの異なるファイルだけをコピーしたいです。
答え1
--compare-dest=DIR
[… ]
パスが相対パスの場合は、ターゲット
DIR
ディレクトリに基づいています。 [… ]
(源泉:man 1 rsync
)
あなたの命令に従って
rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/
OLD/
相対パスです。宛先ディレクトリはですCHANGES/
。OLD/
「ターゲットディレクトリに相対的」とは、実際にはCHANGES/OLD/
現在の作業ディレクトリに相対的であるという意味です。このディレクトリは設定に存在しない可能性が高いです。存在しても参照するディレクトリではありません。
OLD/
呼び出すことができる現在の作業ディレクトリを意味しますCHANGES/../OLD/
。相対部分CHANGES/
は../OLD/
次のとおりです。
rsync -rvcm --compare-dest=../OLD/ NEW/ CHANGES/
CHANGES
ディレクトリへのシンボリックリンクの場合、必ずしもそうではCHANGES/../
ありません./
(比較ls ..
Symlinkディレクトリにあるときに実際の親コンテンツが表示されるのはなぜですか?)。この場合はCHANGES/../OLD/
意味がありませんOLD/
。--compare-dest=…
以下に基づいて議論を構成します。物理ディレクトリ構造。
答え2
通常、タイムスタンプを含め、チェックサムの強制適用を中止することをお勧めします。
rsync -rtvm --compare-dest=OLD/ NEW/ CHANGES/
-a
Linuxベースのファイルシステム間でコピーする場合-rt
。
ローカルコピーを使用しているので(同じシステムにあるようにNEW/
見えるCHANGES/
)、チェックサムを使用して確認することは意味がありません。ファイルをコピーするだけでも速度はほぼ同じです。