単純なtarアーカイブ内のすべてのファイルのsha1チェックサムをリストまたは新しいファイルとして取得したいと思います。
大容量のtarファイルを解凍するためにディスク容量を使用する必要はありません。パイプがあり、すぐにsha1を計算して出力を/ dev / nullに送信します。
私はたくさんのグーグルとパイプでいくつかの実験をしましたが、それほど遠くはありませんでした。
バックアップを確認するのに本当に時間がかかります。
答え1
簡単すぎる:
tar xvJf myArchive.tar.xz --to-command=sha1sum
結果は次のとおりです。
z/
z/DOCUMENTATION
3c4d9df9bcbd1fb756b1aaba8dd6a2db788a8659 *-
z/getnameenv.sh
1b7f1ef4bbb229e4dc5d280c3c9835d9d061726a *-
または、次のコマンドを使用して「tarsha1.sh」を作成します。
#!/bin/bash
sha1=`sha1sum`
echo -n $sha1 | sed 's/ .*$//'
echo " $TAR_FILENAME"
次に、次のように使用します。
tar xJf myArchive.tar.xz --to-command=./tarsha1.sh
結果は次のとおりです。
3c4d9df9bcbd1fb756b1aaba8dd6a2db788a8659 z/DOCUMENTATION
1b7f1ef4bbb229e4dc5d280c3c9835d9d061726a z/getnameenv.sh
答え2
これにより、Vouzeの答えが徐々に改善され、スクリプトの出力がGNUの通常の出力と同じように見えます*sum
。
次のバージョンは、tarhash.sh
必要に応じて/ / ...の現在のバージョンと同じように、改行またはバックスラッシュを含むファイル名を処理します。また、合計とファイル名の間の2つのスペース(またはコマンドをからに変更した場合は単一のスペースの合計)も保持します。md5sum
sha1sum
*
sha1sum
sha1sum --binary
ファイル名が同じ方法でソートされている限り(または両方を最初にソートする場合)、お気に入りのsha1sum
diffツールを使用して、このスクリプトの出力を元の出力と比較できます。
tarhash.sh
:
#!/bin/bash
(echo -n "`sha1sum`" | sed 's/-$//' && echo -n "$TAR_FILENAME") |
sed -z 's/\\/\\\\/g; s/\n/\\n/g; /\\/ s/^/\\/; s/$/\n/;'
使用法:
# Note: In this tar invocation, make sure not to specify -v
# (The output comes out wrong if it is included).
tar xJf myArchive.tar.xz --to-command=./tarhash.sh > sha1sums.txt