Tar命令Solaris版本用于大于2 GB的文件

我们使用tar命令UNIX版本(SunOS 5.5,最后一次更改:1995!)有几个大于2GB的文件。 有“E”标志的tar文件> 2GB。 这是如何完成的:

rsh sun_server tar cvEf - abc/file1 abc/file2 | rsh archive_server archive_cmd 

请注意,archive_server也是一个UNIX服务器,并使用相同版本的tar命令。

在检索中,我们这样做:

 cd /destination_path/ rsh archive_server retrieve_cmd | tar xvf - 

发生了什么事是文件被提取到/ abc /(在父目录); 不在/ destination_path / abc /

奇怪的是我们把检索方法改成了gtar:

 cd /destination_path/ rsh archive_server retrieve_cmd | gtar xvf - 

对于大于2GB的文件,最后会出现很多“错误标题”和“内存耗尽”错误。 但是,对于小于2GB的文件,它们通常被解压到 / destination_path / abc /

我们需要将> 2GB的文件解压到/ destination_path / abc /,因为/ abc /下有很多文件名相同,我们担心提取的文件会覆盖它们。

我也试过了

 rsh archive_server retrieve_cmd | tar xvf - /destination_path/ 

 cd /destination_path/ rsh archive_server retrieve_cmd | tar xvf - . 

但结果是:没有结果! 它显示提取已成功完成,但是没有文件在/ abc /也没有在/ destination_path /!中提取

有没有办法将这些文件提取到所需的目标path..?

rsh比ssh快,但我更喜欢ssh。 这应该用rsh代替ssh。

gtar -cf – 文件| ssh user @ host“(cd / destPath; gtar -xf – )”

这里的关键在括号内。

一个想法,你可以使用命令拆分将tar档案分解成几个部分….例如,考虑类似于:

 tar cf - <dirspec> | split --bytes=1GB <destdir>/archive. 

目标可能是一个NFS挂载的文件系统。 或者,如果您愿意,可以使用多个远程复制命令从本地源发送它们。

那么你可以在目的地的任何时间解开这个东西,使用:

 cd <destdir> cat archive.* | tar xf - 

在networking上,我会有一点担心连续的字节stream的传输,这取决于距离。 无论如何,较小的段传输可能更容易从networking故障中恢复。

为了把事情做得更小,你可以把gzip / gunzipjoin到混音中,具体取决于你可以支付多lessCPU时间。

你需要在两边都使用GNU的tar(gtar)。 Solaris的tar会悄悄地搞乱大于2GB的文件。 另外,它会静静地搞乱长文件名的文件。

上面的几个答案是可行的,但是,请检查一下pax。 它本应该是tar和cpio的替代品,可以更加优雅地处理这项工作。 大多数人还没有采用该工具,因为该工具的广泛普及,但其实其相当不错。

cptfrl