假設我有兩個文件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馴服,但這可能很困難。
假設我有兩個文件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馴服,但這可能很困難。
這似乎比創建臨時文件要好得多:
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`
爲它編寫一個自定義的awk腳本。
使用head -c
指定每個文件的字節數,然後比較它們。
我相信這需要創建至少一個臨時文件,但原本欣賞任何意見:)
也許創建具有適當內容的臨時文件B到的長度可以使用「 - '爭執差異。這實際上意味着「打開stdin」:'head -c 100 a | diff-b'這將比較a中的前100個字節到全部b。 – 2009-08-07 11:28:19
?
幾分邪氣,但是:
SIZE=`stat -c %s filea`
head -c$SIZE fileb >tempfile
diff filea tempfile
EXIT=$?
rm tempfile
exit $EXIT
head -c`stat -c %s filea` fileb |diff -q filea -
+1:不錯的一個!也許你可以添加一條關於如何測試存在狀態'echo $?'的行或者其他的東西 :) – xk0der 2009-06-04 16:07:28