unzip:give:checkdir错误:... /目录存在但不是目录

时间:2015-09-08 21:54:57

标签: bash cygwin

我的团队使用windows生成一个build.zip文件,我想对使用cygwin / bash脚本进行一些后期处理,解压缩,然后进行进一步处理。

我可以使用Windows 7 GUI“Extract All”,一切正常 - 提取工作,进入“问题目录”是没有问题的。每个人都已经这么做了很长时间。

它抱怨的目录包含.obj和.md文件。在一个bash shell中,我可以去它并列出它,一切都很好(在Windows解压后列出它)。但是使用unzip命令,我无法提取build.zip的这一部分。我收到以下错误(以及之前的成功):

  inflating: bld_731/build_20150731/GVII/Software/_bld/rel/tcf/TscControlFmtCtrl.obj
  inflating: bld_731/build_20150731/GVII/Software/_bld/rel/tdl.exe
  checkdir error:  bld_731/build_20150731/GVII/Software/_bld/rel/tdl exists but is not directory
                 unable to process build_20150731/GVII/Software/_bld/rel/tdl/.
       ...

 checkdir error:  bld_731/build_20150731/GVII/Software/_bld/rel/tdl exists but is not directory
             unable to process build_20150731/GVII/Software/_bld/rel/tdl/CmfCmd.obj.

如您所见,它既是目录,也是目录中找到的文件。

你知道如何解决这个问题吗?我需要去另一个提取工具吗?感谢。

2 个答案:

答案 0 :(得分:3)

问题在于Cygwin。它解释了" tld.exe" as" tld"也存在。解压缩可能只是使用标准的stat调用来检查" tld"已存在并检查它是否是目录。 stat可能会说“是”" tld"存在(因为" tld.exe"存在)

touch testfile.exe
if [ -f testfile ] ; then echo y ; else echo n; fi 

在普通的linux类型系统上,您可以期待以上内容回答' n'。但是在cygwin上,结果是' y'

这是cygwin的一种机制,允许在命令中没有.exe的情况下执行windows .exe文件。

请参阅:https://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-exe

答案 1 :(得分:0)

在git bash环境中,maven install遇到了同样的问题。我通过手动创建*.exe文件旁边的目录来解决它。 mvn install然后解压缩了我的工件,没有问题。就您而言,只需转到目标目录并执行mkdir tdl