AIXシステム(v 7.1)からsha1sum
出力に直接パイピングすると、tar
ファイルを読み取るときと比較して別のハッシュコードが計算されます。
理由は何ですか?この問題を解決し、パイプ出力から直接ハッシュコードを取得する方法はありますかtar
?
(DebianやUbuntuなどの他のシステムではパイプsha1sum
出力がtar
うまく機能します)
folder=myfolder
tarfile=myfolder.tar
tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d myfolder.tar
tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d myfolder.tar
tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d myfolder.tar
tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d myfolder.tar
tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270 -
tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270 -
答え1
問題の原因はコマンドですtar
。内部レコードは、固定数の512バイトブロックで構成されています。レコードあたりのブロック数は、パラメータを使用して設定できます-b
。
一部の実装では、テープデバイス、通常のファイル、またはパイプの場合、ファイル記述子に基づいてブロック数を自動的に調整できます。
パラメータを使用してブロック数を変更すると、-b
問題が解決されました。よい: tar -b1 -cf - $folder | sha1sum
。ただし、質問の最初の2つのコマンドで事前定義された基本ブロックを一致させるには、次のものを使用する必要があります-b20
(10240バイトレコードは通常のファイルに格納されているアーカイブのデフォルト値です)。
$ tar -b20 -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d myfolder.tar
$ tar -b20 -cf - $folder |sha1sum
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d