リスト形式の単純な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コンパイルオプションで有効にする必要があります。