2009-06-04 7 views
4

私はAとBの2つのファイルと、そのlengthOf(A)<というlengthOf(B)があるとします。ファイルBが最初のlengthOf(A)バイトのファイルAを複製するかどうかを調べるためのunixユーティリティはありますか?unixコマンドラインでのファイルの比較

「diff A B」を実行すると、出力はBファイルのすべての「余分なもの」になります。私はファイルBに何が含まれているかは気にしない。

私が「通信A B」を行う場合、「Aのみ」の列に何も表示されないことを視覚的に検査しなければならない。これは、lengthOf(B)>> lengthOf(A)のときには難しいかもしれませんが、それはgrepで甘えられていると思います。

答えて

5

これは、一時ファイルを作成するよりもはるかに優れているようだ:邪悪な、しかし

ビット

SIZE=`stat -c %s filea` 
cmp -s -n $SIZE filea fileb # -s for silence 

それらのファイルの最初のバイトが実際に等しいかどうかを確認するために終了状態を確認してください。

更新:xk0derの要求ごととして、ここでは長い例です。また

wormhole:tmp admp$ echo -n "fooa" > one # -n to supress newline 
wormhole:tmp admp$ echo -n "foobc" > two 
wormhole:tmp admp$ SIZE=`stat -c %s one` 
wormhole:tmp admp$ echo $SIZE 
4 
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal" 
not equal 
wormhole:tmp admp$ echo -n "fooac" > two # first 4 bytes are equal now 
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal" 
equal 

、MacOS Xの中であなたが使用する必要があります:

あなたが「を使用することができます
SIZE=`stat -f %z filename` 
+0

+1:いいです!おそらく、存在状態 'echo $?'のテスト方法に関する行を追加することができます。か何か :) – xk0der

-2

カスタムawkスクリプトを作成します。

3

head -cを使用して、各ファイルのバイト数を指定して比較します。

私は、これは少なくとも一つの一時ファイルを作成する必要が信じているが、それ以外は任意のコメントをいただければ幸いです:)

+0

- 'diffの引数。これは実際には "open stdin"を意味します: 'head -c 100 a | diff-b' aの最初の100バイトをbのすべてと比較します。 –

1

たぶんの長さBの適切な内容で一時ファイルを作成しますか?

SIZE=`stat -c %s filea` 
head -c$SIZE fileb >tempfile 
diff filea tempfile 
EXIT=$? 
rm tempfile 
exit $EXIT 
1
head -c`stat -c %s filea` fileb |diff -q filea - 
関連する問題