2017-12-05 13 views
1

シェルの2つの別々のディレクトリにあるファイルの違いを再帰的に調べようとしています。注: - 両方のディレクトリが同一であるだけルート名は、私が「差分ROOT_A/A.md5 ROOT_B/A.md5」したい上記のすべてのための私のスクリプトファイルに再帰的に示した図でシェル内のファイルの違いを再帰的にチェック

enter image description here

異なっていますファイルをルートディレクトリに保存します。

for filename in ROOT_A/*.md5; do 
    diff ($filename | cut -d '/' -f 2) (ROOT_B/$filename) >> logfile.txt done 

ただし、これは機能しません。誰かがこれで私を助けることができますか?おかげ

+0

試したコマンドはどこですか?問題がどこにあるかを確認するためのコードはありません。 –

+0

私のコードをスニペットで更新しました。ありがとう –

+1

Bashでは、 'cut'の代わりに、組み込み関数を使って、接頭辞を削除することで変数の値を変更した方がよいでしょう。 - $ {filename ## * /}"最後の '/'を含めます。もちろん、あなたは 'diff $(...)'( '$'に注意してください)と言っていました。 '(ROOT_B/$ filename)'は、あなたが信じていると思われるものを意味するものではありません。 – AlexP

答えて

3

は、あなたのシェルはbashのであると仮定すると:

ROOT_A='...' 
ROOT_B='...' 
for file in "$ROOT_A"/*.md5; do 
    ! test -r "$file" || ! test -r "$ROOT_B/${file##*/}" && continue 
    echo "Comparing $file with $ROOT_B/${file##*/}" 
    diff "$file" "$ROOT_B/${file##*/}" 
done 

@CharlesDuffyが観察などのファイルが本当にMD5サム(またはチェックサムのような他の種類)であればそれはdoesnのため、diffcmpに置き換えてくださいどのようにファイルが異なっていても同じであるか異なる場合にのみ、が異なっています。

+0

私は 'diff'ではなく' cmp'を提案します。「どのように違いますか」と答える必要なく、「これらのファイルは異なっていますか?」という質問に答えた直後にすぐに終了できる小さなツールです。 (特に 'cmp -q'で真です、ここでは終了ステータスを検査するだけです - これはmd5チェックサムではないはずですが、' cmp -q'はファイルを見ることなく*それらのサイズが異なる場合は 'stat'データで、同じiノードによってバックアップされている場合は同一である) –

+0

@CharlesDuffy:OPはファイルを比較したいです。 – AlexP

+0

あなたは正しいです - OPはmd5sumsの文脈で間違ったことをかなり明白なものを求めていますが、依然として求めているものです。 –

関連する問題