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

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

我们有几个大于 2GB 的文件,使用 UNIX 版本的 tar 命令(SunOS 5.5,上次更改时间:1995 年!)进行打包。对于大于 2GB 的 tar 文件,有一个“E”标志。这是如何完成的:

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 的文件,它们会正常提取到 /目标路径/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/ 中均未提取任何文件!

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

答案1

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

gtar -cf - 文件 | ssh 用户@主机“(cd /destPath; gtar -xf -)”

这里的关键是用括号括起来。

答案2

一个想法,您可以使用命令 split 将 tar 存档分成几部分....例如,考虑类似以下操作:

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

目标可以是 NFS 挂载文件系统。或者,如果您愿意,也可以从本地源发送它们,然后同时运行多个远程复制命令。

然后,您可以随时在目标位置解压该文件,使用以下命令:

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

在网络上,我对传输这么长的连续字节流(取决于距离)有点担心。无论如何,较小的段传输可能更可取,以便更容易从网络故障中恢复。

为了使文件更小,您可以根据您所能承受的 CPU 时间添加 gzip/gunzip。

答案3

您需要在两边都使用 GNU 的 tar (gtar)。Solaris 的 tar 会悄悄破坏大于 2GB 的文件。此外,它还会悄悄破坏文件名较长的文件。

答案4

上述几个答案都可以,但是,请查看 pax。它被认为是 tar 和 cpio 的替代品,可能会更优雅地处理工作。大多数人没有采用该工具,因为该工具非常受欢迎,但它实际上非常好。

韓國

相关内容