Command-Line
如何在busybox上的tar存檔中創建文件的sha1校驗和而不使用太多磁碟空間
我想在一個簡單的 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