我有一個成功下載的檔案和另一個下載失敗的檔案(只有大檔案的前 100 MB),我懷疑這是同一個檔案。
為了驗證這一點,我想檢查它們的雜湊值,但由於我只有未成功下載的檔案的一部分,所以我只想對前幾兆位元組左右進行雜湊值。
我該怎麼做呢?
作業系統是windows,但我安裝了cygwin和MinGW。
答案1
如果您將一個檔案與多個檔案進行比較,或將多個檔案相互比較,則建立雜湊來比較檔案是有意義的。
僅比較兩個檔案一次是沒有意義的:計算雜湊值的工作量至少與遍歷檔案並直接比較它們一樣高。
一個有效的文件比較工具是cmp
:
cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical"
您也可以將其結合起來dd
比較兩個文件的任意部分(不一定從頭開始),例如:
cmp \
<(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
<(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical"
答案2
很抱歉我不能完全嘗試,但這種方法會起作用
dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1
這將為您提供兩個文件的前 100 MB。
現在取得哈希值:
sha256sum first100mb1.dat && sha256sum first100mb2.dat
您也可以直接運行它:
dd if=yourfile.zip bs=100M count=1 | sha256sum
dd if=yourotherfile.zip bs=100M count=1 | sha256sum
答案3
每個人似乎都走 Unix/Linux 路線,但只需比較 2 個檔案就可以使用 Windows 標準命令輕鬆完成:
FC /B file file2
FC 出現在每個 Windows NT 版本。並且(如果沒記錯的話)也出現在 DOS 中。
雖然速度有點慢,但對於一次性使用來說沒關係。
答案4
我知道它說的是 Bash,但 OP 也說他們有 Windows。對於任何想要/需要 Windows 解決方案的人,有一個名為 HxD 的程序,它是一個可以比較兩個檔案的十六進位編輯器。如果檔案大小不同,它會判斷可用部分是否相同。如果需要,它能夠對目前選擇的任何內容運行校驗和。它是免費的,可以從以下位置下載:HxD 網站。我與作者沒有任何联系,我只是使用它多年。