我用远程机器上的目录制作了一个tar:
tar -czvf
Run Code Online (Sandbox Code Playgroud)
我将它 scp 到我的本地机器,我想在那里解压它:
tar -xzvf
Run Code Online (Sandbox Code Playgroud)
但我得到: Cannot open: File name too long
在我上lubuntu 12.04本地机器上,我有: tar (GNU tar) 1.26
。
现在无法访问远程机器,如果需要,我会在之后检查版本。
我想提取而不必制作新的 tar,特别是因为远程机器处于离线状态。
顺便说一句,如果您知道一种尽管名称很长但可以制作适当存档的方法,我会接受的。
tar
将文件名限制为 256 字节(带有 GNU 扩展名)。Linux 文件系统支持每个文件名至少 256 个字节。这意味着tar
可以无误地提取任何打包的文件。所以我想有两个原因:
tarball 已损坏,请通过以下方式检查:
$ tar -tvf tarball.tar
Run Code Online (Sandbox Code Playgroud)
如果有的话,你会看到一些错误。
您使用“虚拟”文件系统,如fusecompress或ecryptfs(具有选择性文件压缩/加密),并且您的文件名略短或等于文件系统限制。诀窍是当您使用 fusecompress (例如)挂载目录并创建文件名时foo.bar
,虚拟文件系统会创建一个名为的文件foo.bar.gz
并透明地压缩它,但对您隐藏真实的文件名。如果您创建一个名称长度为 254 字节的文件,则会出现错误,因为它会尝试向其附加后缀。
在这种情况下,简单地从虚拟文件系统之外提取 tarball 应该会有所帮助:
$ sudo mkdir /home/${USER}-temp
$ sudo chown $USER /home/${USER}-temp
$ tar -xvf tarball.tar -C /home/${USER}-temp
Run Code Online (Sandbox Code Playgroud)无论如何,尝试跟踪它以获取更多信息:
$ strace -o tar-strace.log tar -tf tarball.tar
$ ltrace -o tar-ltrace.log tar -tf tarball.tar
Run Code Online (Sandbox Code Playgroud)