Extrat tar“无法打开:文件名太长”

mth*_*pvg 4 command-line tar

我用远程机器上的目录制作了一个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,特别是因为远程机器处于离线状态。

顺便说一句,如果您知道一种尽管名称很长但可以制作适当存档的方法,我会接受的。

Dmi*_*try 6

tar将文件名限制为 256 字节(带有 GNU 扩展名)。Linux 文件系统支持每个文件名至少 256 个字节。这意味着tar可以无误地提取任何打包的文件。所以我想有两个原因:

  1. tarball 已损坏,请通过以下方式检查:

    $ tar -tvf tarball.tar
    
    Run Code Online (Sandbox Code Playgroud)

    如果有的话,你会看到一些错误。

  2. 您使用“虚拟”文件系统,如fusecompressecryptfs(具有选择性文件压缩/加密),并且您的文件名略短或等于文件系统限制。诀窍是当您使用 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)