tar 文件中的哈希文件

tar 文件中的哈希文件

我有兩個*.tar內容相似的文件。我想驗證哪些文件是相同的。很多檔案很大,因此我比較雜湊值需要從每個 tar 中提取每個檔案並計算雜湊值。有沒有一種方法可以在不需要解壓縮的情況下對 tar 中的檔案進行雜湊處理?還有另一種方法可以比較兩個*.tar文件之間的文件嗎?

答案1

如果是 GNU tar,請執行以下命令:

tar -xf file1.tar --to-command=file-stats-from-tar

其中 file-stats-from-tar 位於以下位置$PATH

#!/bin/bash

md5=`md5sum`;
md5=${md5%% *}

printf "%s\t%s\n" $md5 "$TAR_FILENAME"

md5sum如果需要,請更改。

這一切只需一次即可完成。

它的工作原理是該--to-command選項告訴 tar 發送每個文件單獨到您指定的命令,並設定了一堆環境變數(我們僅TAR_FILENAME在此處使用)。

答案2

可能有更有效的方法,但我很快就想出了這個:

tar tf test.tar | while read x ; do echo "$(tar xfO test.tar ${x} | md5sum) ${x}" ; done

第一個tar tf僅列出存檔中的文件,然後將其傳遞到while read xbash 循環。對於每個檔案名,它會使用tar xfO test.tar ${x} | md5sum您顯然可以用您首選的哈希工具替換 md5sum 來查找哈希值。奇怪的用法echo $() ${x}只是保持輸出類似於常規哈希輸出,其中值在左側,檔案名稱在右側。如果沒有它,它只會為您提供所有檔案的雜湊值,但不會提供名稱,因此您無法分辨哪個檔案去了哪個檔案。即使有了它-,輸出中也會有一個通常不存在的額外列。可以使用colrm管道中的命令輕鬆刪除它。

這可能不是最有效的,因為如果 tar 檔案中有 n 個文件,它必須遍歷 tar 檔案 n+1 次,但希望 tar 內容在第一次讀取後被快取。

相關內容