解压缩 - 警告和映射名称

18

我有一个文件夹,通过使用共享链接(而不是公共链接)和curl从Dropbox下载。它被下载为一个压缩文件夹。 我需要在bash shell脚本中使用unzip解压此文件夹。每当文件夹被解压缩时,我都会收到以下错误:

warning:  stripped absolute path spec from /
mapname:  conversion of  failed

为确保这不是curl出现的问题,我直接从Dropbox下载了文件夹并再次尝试。我得到了同样的错误。所有的文件和子目录都显示出来,它们的完整性似乎没有任何问题。使用GUI解压缩这两个文件夹都没有出现错误信息。

我运行了unzip -l并注意到一个奇怪的第一个条目:

     Length   Method    Size  Ratio   Date   Time   CRC-32    Name
    --------  ------  ------- -----   ----   ----   ------    ----
           0  Defl:N        2   0%  01-23-14 19:38  00000000  /

我认为是这个空目录导致了问题。我的问题是,是否有任何方法可以忽略这个空目录或者抑制这些错误信息(我尝试了 -qq 没有成功)?或者,是我做错了什么/遗漏了什么吗?

我已经在 Mac OSX 10.9.1Ubuntu Linux (Version Unknown) 上进行了测试,结果相同。

编辑:我还使用 jar xf 进行了测试,没有出现任何错误。运行 jar xvf 显示它创建了一个 / 目录。我仍然认为是这个空的、未命名的目录导致了问题,但我似乎无法正确地使用语法让解压程序忽略它。我只能使用 jar,但我需要能够指定输出目录。


你可以尝试通过文件名显式地提取压缩档案中的其他文件,例如 unzip /path/to/filename.zip filename.ext file2.ext 以从档案中提取 filename.extfile2.ext - DopeGhoti
谢谢!我确实考虑过这个问题,但一旦 shell 脚本完成后,它将被移交,我将无法维护它。文件夹的内容很可能会发生变化。现在它实际上运行得很好,只是错误/警告有点烦人,可能会引起最终用户的警觉。 - USCFan13
1
你可以始终使用 2> /dev/null 来抑制警告。另外,你也可以通过 -x 排除其中有问题的部分作为另一种选择。 - DopeGhoti
我忘记了 /dev/null。我尝试了 -x 选项,但问题出在一个空目录“/”,我似乎无法让它工作。不过这可能只是我的语法问题。你会怎么做? - USCFan13
将所有输出发送到 null 是否安全?如果发生合法错误会怎样? - USCFan13
如果发生合法错误,程序将以非零退出码终止;您可以检查 $? 来验证退出码是否为 0。警告也可能会给出非零的退出码,但您可以查看警告的退出码并进行检查。 - DopeGhoti
2个回答

16
尝试从命令行解压Dropbox自动生成的zip文件时,我也遇到了这个消息:
warning:  stripped absolute path spec from /
mapname:  conversion of  failed

我将Dropbox的zip与一个“普通”的zip进行了比较。

区别在于,在解压时,Dropbox的zip文件中首先出现了一种类似于/的文件。

我只需在解压命令中添加选项-x /,尝试排除它,这对我很有效。


3
如果使用了 -d 参数,应该将 -x / 放在 unzip 命令的末尾。例如:unzip INPUT.zip -x / -d OUTPUTDIR。 - user3748764
解压缩 ARCHIVE.zip 并排除 / 目录。

这个命令有效。
- Vedavrat

2

我认为,根本问题在于存档文件,而不是您的命令。

默认情况下,我们在ZIP文件中存储相对路径。例如:

$ zip tmp.zip /home/mcoolive/*txt
adding: home/mcoolive/file1.txt (deflated 73%)
adding: home/mcoolive/file2.txt (deflated 76%)

默认情况下,解压缩会在当前目录中重新创建所有文件和子目录。

在您的情况下,归档文件包含绝对路径。这是不好的。所以您的客户端会将绝对路径转换为相对路径并发出警告。


使用某些版本的UNZIP,它可以提取所有文件并警告说根目录(第一个/)被忽略。如果你真的需要根目录,你可以使用“chroot”来隔离你的进程。如果可以的话,请使用相对路径的ZIP归档。 - mcoolive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接