ディスクスペースをあまり使用せずにbusyboxのtarアーカイブ内でファイルのsha1チェックサムを生成する方法

ディスクスペースをあまり使用せずにbusyboxのtarアーカイブ内でファイルのsha1チェックサムを生成する方法

リスト形式の単純なtarアーカイブ内のすべてのファイルのsha1チェックサムを取得したいと思います。

これは、最小限の tar バイナリしか使用できないビジボックス マシンで行う必要があります。http://linux.die.net/man/1/busybox使用可能なコマンドを取得します。

大容量のtarファイルを解凍するためにディスク容量を使用する必要はありません。パイプがあり、すぐにsha1を計算して出力を/ dev / nullに送信します。

これにより、ネットワーク経由でファイルをコピーまたは抽出することなくバックアップを確認できます。どちらのタスクもリソースを消費します。

これは基本的に同じ質問です。ディスクスペースをあまり使用せずにtarアーカイブ内でファイルのsha1チェックサムを生成する方法良い答えがありますが、後でbusybox tarバイナリがオプションがない最小バージョンであることに気づきました--to-command=sha1sum

答え1

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

答え2

このソリューションの主な問題は次のとおりです。

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

1-busyboxのtarは改行文字を含む他のファイル名を表示できません。

2- シェルから「読み取り」すると、バックスラッシュが正しく処理されません。 (「\」文字が食べられるか、「\n」が改行文字に置き換えられます)

3-二重引用符のないシェル変数は、繰り返される空白文字を食べます。

問題 1 を解決できません。

とにかく2番と3番は直すことができます。

次のシェルスクリプトを作成します。 "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コンパイルオプションで有効にする必要があります。

関連情報