untar せずに SED を使用して Unix で tar ファイルを編集する方法は?
.tar 内の各ファイルとファイル名で利用可能なタイムスタンプを変更したいと考えています。
あなたが忍者でない限り、sed以上のものが必要になると思います. 手始めに、tar ブロック ヘッダーの日付を置き換えるだけでなく、ヘッダー チェックサム、ヘッダー サイズ フィールドを適切に更新し、ヘッダー仕様の他のすべての複雑さに対処する必要があります。
そうは言ってArchive::Tar::Stream
も、上記のすべてを処理する Perl のモジュールを確認することをお勧めします。
http://metacpan.org/pod/Archive::Tar::Stream
mtime
tar 内のすべてのファイルを現在の時刻に更新し、ファイル名をすべて untar せずに変更するスクリプトの例を次に示します。
use Archive::Tar::Stream;
my $infile = $ARGV[0];
my $outfile = $ARGV[1];
open( my $infh, "<", $infile );
open( my $outfh, ">", $outfile );
my $ts = Archive::Tar::Stream->new(infh => $infh, outfh => $outfh);
while (my $header = $ts->ReadHeader()) {
$header->{'mtime'} = time();
$header->{'name'} = "whatever.txt";
$ts->WriteHeader($header);
$ts->CopyBytes($header->{size});
};