我们使用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