2009-06-04 168 views
4

假設我有兩個文件A和B,並且lengthOf(A)< lengthOf(B)。是否有一個unix實用程序來判斷文件B是否爲第一個lengthOf(A)個字節複製了文件A?比較unix命令行上的文件

如果我做了「diff A B」,那麼輸出將是B文件中所有'額外的東西',它會錯過點;我不在乎文件B中還有什麼可能。

如果我做「comm 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 2009-06-04 16:07:28

-2

爲它編寫一個自定義的awk腳本。

3

使用head -c指定每個文件的字節數,然後比較它們。

我相信這需要創建至少一個臨時文件,但原本欣賞任何意見:)

也許創建具有適當內容的臨時文件B到的長度
+0

可以使用「 - '爭執差異。這實際上意味着「打開stdin」:'head -c 100 a | diff-b'這將比較a中的前100個字節到全部b。 – 2009-08-07 11:28:19

1

幾分邪氣,但是:

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 -