ファイルのすべての行を比較するbashという関数がUNIXで利用できるかどうか誰かが教えてもらえないかと思っていました。それらが異なる場合は、true/falseまたは-1,0,1を出力する必要があります。私はこれらのcmp関数が他の言語で存在することを知っています。私はマニュアルページを見回してきましたが、うまくいきませんでした。それが利用できない場合、誰かが私に代替の解決策を考え出すのを手伝ってくれる?
ありがとう
これにはいくつかの方法があります。
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"
else
echo "The files are different"
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 : "
echo
md1=$(md5 ${file1});
md2=$(md5 ${file2});
mdd1=$(echo $md1 | awk '{print $4}' )
mdd2=$(echo $md2 | awk '{print $4}' )
echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo
#if [ $mdd1 = $mdd2 ];
if [ $mdd1 -eq $mdd2 ];
then
echo "The files match"
else
echo "The files are different"
fi
2つのファイルに対して md5 を実行し、bash
の結果を比較できます。
テストするUnixボックスはありませんが、これは正しいはずです。
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi
エコー "最初のファイルの読み取り"読み取りf1エコー "2番目のファイルの読み取り"読み取りf2
diff -s f1 f2#両方のファイルが同一の場合に出力