15

ファイルのすべての行を比較する unix、bash で利用可能な機能があるかどうか、誰かが教えてくれるかどうか疑問に思っていました。それらが異なる場合は、true/false または -1,0,1 を出力する必要があります。これらの cmp 関数が他の言語に存在することは知っています。私はmanページを見回してきましたが、うまくいきませんでした。利用できない場合、誰かが別の解決策を考え出すのを手伝ってくれますか?

ありがとう

4

5 に答える 5

37

これを行うにはいくつかの方法があります。

  • cmp -s file1 file2:の値を見てください$?。両方のファイルが一致する場合はゼロ、それ以外の場合はゼロ以外。
  • diff file1 file2 > /dev/nulldiffコマンドの一部の形式は、何も出力しないように指示するパラメーターを取ることができます。ただし、ほとんどはそうではありません。結局のところ、diff2つのファイルの違いを確認するために使用します。繰り返しますが、終了コード($?ファイルが一致する場合はの値が0になり、一致しない場合はゼロ以外の値になることを確認できます。

次のコマンドをシェルのifステートメントで使用できます。

if cmp -s file1 file2
then
   echo "The files match"
else
   echo "The files are different"
fi

このdiffコマンドは、テキストファイル専用に作成されています。このcmpコマンドは、すべてのバイナリファイルでも機能するはずです。

于 2012-10-04T21:38:40.143 に答える
7

それを行う簡単なcmp file fileコマンドがあります。等しい場合は 0 を返し、異なる場合は 1 を返すため、ifs で使用するのは簡単です。

if cmp file1 file1; then
    ...
fi

これが役立つことを願っています=)

于 2012-10-04T21:31:07.433 に答える
2
#!/bin/bash

file1=old.txt
file2=new.txt

echo " TEST 1 : "
echo

if [ $( cmp -s ${file1} ${file2}) ]
then
   echo "The files match :  ${file1} - ${file2}"
else
   echo "The files are different :  ${file1} - ${file2}"
fi

echo
echo " TEST 2 : "
echo
bool=$(cmp -s "$file1" "$file2" )
if cmp -s "$file1" "$file2"
then
   echo "The files match"
else
   echo "The files are different"
fi

echo
echo " TEST 3 : md5 / md5sum - compute and check MD5 message digest"
echo

md1=$(md5 ${file1});
md2=$(md5 ${file2});

mdd1=$(echo $md1 | awk '{print $4}' ) 
mdd2=$(echo $md2 | awk '{print $4}' ) 

# or md5sum depends on your linux flavour :D
#md1=$(md5sum ${file1});
#md2=$(md5sum ${file2});

#mdd1=$(echo $md1 | awk '{print $1}' ) 
#mdd2=$(echo $md2 | awk '{print $1}' ) 

echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo

#if [ $mdd1 = $mdd2 ]; 
if [ $mdd1 -eq $mdd2 ]; 
then
   echo "The files match :  ${file1} - ${file2}"
else
   echo "The files are different :  ${file1} - ${file2}"
fi
于 2016-04-15T04:52:03.447 に答える
0

echo "最初のファイルを読む" read f1 echo "2番目のファイルを読む" read f2

diff -s f1 f2 # 両方のファイルが同一の場合に出力

于 2016-05-15T04:36:54.643 に答える
0

2 つのファイルに対してmd5を実行し、結果を で比較できますbash

ここにはテストする Unix ボックスはありませんが、これは正しいはずです。

#!/bin/bash

md1=$(md5 file1);
md2=$(md5 file2);

if [ $md1 -eq $ $md2 ]; then
  echo The same
else
  echo Different
fi
于 2012-10-04T21:19:34.050 に答える