私はunixが初めてなので、ここで助けが必要です。 2つの異なるサーバーに2つのディレクトリがあります。両方のディレクトリに同じファイルが含まれています。次に、両方のディレクトリですべてのファイルが同期しているかどうかを確認します。ファイルが同期していない場合、それらのファイルの名前のみを表示したいです。ディレクトリが同じサーバー上にある場合、私はそれを行うことができます。ディレクトリが2つの異なるサーバーに存在する場合、これを行う方法を理解できません。
eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/
ここでは、同期していないときにファイル名のみを表示したいです。
前もって感謝します
Rsyncを-n
フラグとともに使用して、実際に同期を実行せずにファイルが同期しているかどうかを確認できます。
たとえば、from server1:
rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/
これにより、-r
とserver1:/abc/home/sample1/
の間で異なるすべてのファイルの名前(再帰的、server2:/abc/home/sample2/
フラグ付き)が出力されます。
rsync
使用パラメーターの説明
-n, --dry-run
-変更を加えずに試運転を実行します
-a, --archive
-アーカイブモード。 -rlptgoDと等しい(-H、-A、-Xなし)
-v, --verbose
-冗長性を高める
-r, --recursive
-ディレクトリへの再帰
-c, --checksum
-mod-timeおよびsizeではなく、チェックサムに基づいてスキップ
Server1で:
cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n")
これは非常に高速ですが、コンテンツのハッシュではなくファイルサイズを使用するため、rsyncほど正確ではないでしょう。また、server2にserver1よりも多くのファイルがある場合、kielniの答えからのrsyncは何も表示しません。代わりにこれを試してください:
rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
2つのサーバー間に接続性がないシナリオでは、「tree」コマンドを使用してファイルのディレクトリ構造を取得し、2つのファイルを比較します。
私はいつもそのようなタスクにrsync -avcn
を使用しています-私はCLIファンです。アイデアは、「ドライラン」(-n
)を実行することです。これは、実際にファイルをコピーしたり、変更を加えたりせずに行われたことを示します。 -c
スイッチの使用は、変更日やファイルサイズではなくチェックサムを使用してファイルが異なるかどうかを判断するため、非常に重要です。 -a
は、比較がより徹底的であることを確認し、プログラムがサブディレクトリに飛び込むことを強制します。最後に、-v
は冗長性のレベルを上げます。これは、異なるファイルが見つかった場合に役立ちます。
したがって、考えられる解決策は次のようになります。
rsync -avcn source_dir/ dest_dir/
rsync
は、2つのディレクトリ間で異なるファイルの名前を出力します。末尾のスラッシュに注意してください-それらは必須です。
ただし:
rsync -avcn source_dir/ dest_dir/ > diffs.txt
rsync -avcn /src/My Dir/ dest/My dir/
はあなたが望むものではありません。むしろ、rsync -avcn /src/My\ Dir/ dest/My\ Dir/
またはおそらくrsync -avcn /src/"My Dir"/ dest/"My Dir"/
を使用する必要があります。この点は、Windowsマウントを扱う場合に特に有効です。