2013-10-16 4 views
17

私はUNIXには新しく、ここで助けが必要です。 2つの異なるサーバーに2つのディレクトリがあります。両方のディレクトリに同じファイルが含まれています。今私は両方のディレクトリですべてのファイルが同期しているかどうかを確認したい。ファイルが同期していない場合は、それらのファイルの名前のみを表示します。 ディレクトリが同じサーバー上にあるときに実行できます。 2つの異なるサーバーにディレクトリが存在する場合、これを行う方法を理解することはできません。は、UNIXを使用してリモートサーバ上の2つのディレクトリの内容を比較します。

eg: 
server1 /abc/home/sample1/ 
server2 /abc/home/sample2/ 

ここでは、同期していないときに表示するファイル名のみを入力します。事前

+0

一般的なシステムに2台のサーバーをマウントし、*いつものように*を比較します。 – devnull

+0

diff、rsync、またはvimdiffを使用してこれを達成することはできません – DSD

答えて

44

ありがとうございますファイルが同期している場合、実際に同期を行わず、見つけるために-nフラグではrsyncを使用することができます。サーバー1から例えば

、:/ ABC /ホーム/ SAMPLE1 /とserver2:

rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/ 

これは、サーバ1間で異なる(-rフラグと再帰、)すべてのファイルの名前を出力します/ ABC /ホームserver1上の/ SAMPLE2/

+0

sshでrsyncを使用しても問題なく動作します。 – DSD

+1

偉大な答えです。ここでの '-c'は、特にチェックサムで比較されるので、非常に重要です。それがなければ私は偽陽性になっていました。 '-a'は' -r'を意味します( '--files-from'を使わない限り) – isuldor

+3

これをまとめてください。 'rsync -avcn folder1/folder2 /'が必要です。 – mniess

4

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は何も表示されません。これに代えてみてください:2つのサーバー間の接続なしのシナリオでは

rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/ 
+0

あなたのrsyncコマンドは、それが唯一のものだから受け入れられた答えでなければなりません。 –

+0

サーバー2にはファイルが存在し、サーバー1にはファイルが存在しないことを示すには、--deleteが必要です。 – tsukimi

0

、ファイルにディレクトリ構造を取得するには、「ツリー」コマンドを使用し、その後、2つのファイルをdiffを。

関連する問題