ファイルのすべての行を比較する unix、bash で利用可能な機能があるかどうか、誰かが教えてくれるかどうか疑問に思っていました。それらが異なる場合は、true/false または -1,0,1 を出力する必要があります。これらの cmp 関数が他の言語に存在することは知っています。私はmanページを見回してきましたが、うまくいきませんでした。利用できない場合、誰かが別の解決策を考え出すのを手伝ってくれますか?
ありがとう
これを行うにはいくつかの方法があります。
cmp -s file1 file2
:の値を見てください$?
。両方のファイルが一致する場合はゼロ、それ以外の場合はゼロ以外。diff file1 file2 > /dev/null
:diff
コマンドの一部の形式は、何も出力しないように指示するパラメーターを取ることができます。ただし、ほとんどはそうではありません。結局のところ、diff
2つのファイルの違いを確認するために使用します。繰り返しますが、終了コード($?
ファイルが一致する場合はの値が0になり、一致しない場合はゼロ以外の値になることを確認できます。次のコマンドをシェルのifステートメントで使用できます。
if cmp -s file1 file2
then
echo "The files match"
else
echo "The files are different"
fi
このdiff
コマンドは、テキストファイル専用に作成されています。このcmp
コマンドは、すべてのバイナリファイルでも機能するはずです。
それを行う簡単なcmp file file
コマンドがあります。等しい場合は 0 を返し、異なる場合は 1 を返すため、if
s で使用するのは簡単です。
if cmp file1 file1; then
...
fi
これが役立つことを願っています=)
#!/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
echo "最初のファイルを読む" read f1 echo "2番目のファイルを読む" read f2
diff -s f1 f2 # 両方のファイルが同一の場合に出力
2 つのファイルに対してmd5を実行し、結果を で比較できますbash
。
ここにはテストする Unix ボックスはありませんが、これは正しいはずです。
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi