如何使用SED在Unix中编辑tar文件而不解开它们?

时间:2013-05-24 04:00:49

标签: sed

如何使用SED在Unix中编辑tar文件而不解压缩它们?

我想更改.tar以及文件名中每个文件的可用时间戳。

1 个答案:

答案 0 :(得分:2)

除非你是忍者,否则我认为你需要的不仅仅是sed。对于初学者,您需要做的不仅仅是替换tar块头中的日期,还需要适当更新头校验和,头大小字段,并处理头规范的所有其他复杂性。

话虽如此,我建议您查看Perl的Archive::Tar::Stream模块,该模块可以为您处理上述所有内容:

http://metacpan.org/pod/Archive::Tar::Stream

这是一个示例脚本,它将tar中所有文件的mtime更新为当前时间,并更改文件名,所有这些都不需要解决:

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});
};