如何使用SED在Unix中编辑tar文件而不进行错误处理?

如何使用SED在Unix中编辑tar文件而不进行错误处理?,sed,Sed,如何使用SED在Unix中编辑tar文件而不进行错误处理 我想更改.tar中每个文件以及文件名中可用的时间戳。除非你是忍者,否则我认为你需要的不仅仅是sed。对于初学者来说,您需要做的不仅仅是替换tar块标题中的日期,还需要适当地更新标题校验和、标题大小字段,并处理标题规范的所有其他复杂问题 话虽如此,我建议您检查一下Perl的Archive::Tar::Stream模块,它为您处理上述所有问题: 下面是一个示例脚本,它将tar中所有文件的mtime更新为当前时间,并更改文件名,所有这些都不会

如何使用SED在Unix中编辑tar文件而不进行错误处理


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

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

话虽如此,我建议您检查一下Perl的
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});
};
使用Archive::Tar::Stream;
my$infle=$ARGV[0];
my$outfile=$ARGV[1];
打开(我的$infh,“,$outfile);
我的$ts=Archive::Tar::Stream->new(infh=>$infh,outph=>$outph);
而(my$header=$ts->ReadHeader()){
$header->{'mtime'}=time();
$header->{'name'}=“whatever.txt”;
$ts->WriteHeader($header);
$ts->CopyBytes($header->{size});
};

这听起来不太可能。有没有理由不解开、更改时间戳,然后重新给它们加上皮重?