Tar
tar 文件中的雜湊文件
我有兩個
*.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 x
bash 循環中。對於每個文件名,它會使用tar xfO test.tar ${x} | md5sum
您顯然可以將 md5sum 替換為您首選的雜湊工具來查找雜湊。的奇怪用途echo $() ${x}
只是保持輸出類似於正常雜湊輸出,左側的值和右側的文件名。沒有它,它只會為您提供所有文件的雜湊值,但沒有名稱,因此您無法分辨哪個文件去了哪個文件。即使有了它,-
輸出中也有一列通常不存在的額外列。它可以通過colrm
管道中的命令輕鬆刪除。這可能不是最有效的,因為如果其中有 n 個文件,它必須遍歷 tar 文件 n+1 次,但希望 tar 內容在第一次讀取後被記憶體。