Command-Line

如何在busybox上的tar存檔中創建文件的sha1校驗和而不使用太多磁碟空間

  • August 22, 2016

我想在一個簡單的 tar 存檔中獲取所有文件的 sha1 校驗和作為列表。

這應該在只有最小的 tar 二進製文件可用的 busybox 機器上完成,有關可用命令,請參見http://linux.die.net/man/1/busybox

無需使用磁碟空間來解壓大 tar 文件。帶有管道和即時計算 sha1 的東西,將輸出定向到 /dev/null

這將使驗證備份成為可能,而無需通過網路複製文件或提取文件,這都是資源消耗。

這與如何在不使用太多磁碟空間的情況下在 tar 存檔中創建文件的 sha1 校驗和基本相同,這有一個很好的答案,但我後來才意識到,busybox tar 二進製文件是一個沒有--to-command=sha1sum選項的最小版本。

以下是此解決方案的一些主要問題:

tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done

1-busybox 的 tar 不能用換行符顯示不同的文件名。

2-shell 的“讀取”不能正確處理反斜杠。(“\”字元被吃掉或“\n”被換行符替換)

沒有雙引號的 3-Shell 變數會吃掉重複的空格字元。

我無法解決問題 1。

無論如何,我可以修復2和3。

創建這個 shell 腳本:“tarsha1.sh”(不要忘記“chmod 755 tarsha1.sh”)

#!/bin/sh
tarname="$1"
shift
for filename in "$@"
do tar xOf "$tarname" "$filename" | sha1sum | head -c -3
  printf '%s\n' "$filename"
done

然後使用這個命令:

tar tf test.tar | tr '\n' '\0' | xargs -0 -r ./tarsha1.sh test.tar

有了它,您應該能夠處理除換行符(“\n”)之外的任何字元的文件名。

注意:xargs 的“-0”選項必須在busybox 編譯選項中啟動。

tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done 

引用自:https://unix.stackexchange.com/questions/303701