Tar

tar 文件中的雜湊文件

  • January 26, 2020

我有兩個*.tar內容相似的文件。我想驗證哪些文件是相同的。很多文件都很大,所以我比較雜湊需要從每個 tar 中提取每個文件併計算雜湊。有沒有辦法在 tar 中散列文件而不必提取它?還有另一種方法來比較兩個*.tar文件之間的文件嗎?

如果是 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在這裡使用)。

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

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管道中的命令輕鬆刪除。

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

引用自:https://serverfault.com/questions/1000381