如何使用 SED 在 Unix 中编辑 tar 文件而不解压缩它们?
我想更改 .tar 中每个文件以及文件名中可用的时间戳。
除非您是忍者,否则我认为您需要的不仅仅是 sed。对于初学者,您需要做的不仅仅是替换 tar 块标头中的日期,还需要适当地更新标头校验和、标头大小字段,并处理标头规范的所有其他复杂性。
话虽如此,我建议您查看 Perl 的Archive::Tar::Stream
模块,它为您处理上述所有内容:
http://metacpan.org/pod/Archive::Tar::Stream
这是一个示例脚本,它将mtime
tar 中的所有文件更新为当前时间,并更改文件名,所有这些都无需解压:
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});
};