2012-03-14 87 views
15

我想创建一个zip文件,并且希望保留大部分的目录结构,但不是从命令行定义的rootdir。我使用的命令是:如何创建一个没有整个目录结构的zip文件

zip -r out.zip /foo/bar/ 

我想它经过巴和递归添加的所有文件保存与目录结构(它)。但是我不希望'foo'成为创建的zip文件中的顶级目录。我希望酒吧成为顶级目录。

有没有简单的方法可以解决这个问题?我知道我可以在压缩之前更改目录以避免出现问题,但我正在寻找一种不需要此功能的解决方案。

回答

8

我不相信zip有办法排除顶级目录。我认为你最好的选择是做如下事情: pushd/foo; zip -r out.zip ./bar; POPD;

但是,这正是你说你不想要的答案。

+2

我怀疑'tar -C/foo/bar -c out.tar *'让他更开心。 – 2012-03-14 21:39:54

+1

我第二个这个。我在Mac上,需要zip而不是tar.gz. pushd似乎是一个非常好的选择。 – slott 2013-04-14 20:41:56

8

这应做到:

cd /foo/bar/ 
zip -r ../out.zip * 

归档将在/foo/out.zip

+1

OP说他不想改变目录。 – Amala 2013-03-20 18:08:39

+0

这个答案正是OP想要的。应该是被接受的答案。 – Jason 2013-09-15 05:23:25

+0

我正在PHP脚本中运行zip。怎么办? – 2014-09-08 21:45:44

-1

如果有人绊倒在此,它并不满足于上述方案,这里有个很简单的解决方法不压缩长子目录。它包括暂时用C创建一个文件夹:/,并荏苒简单地删除之后:

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../ 

dir.create("C:/ZipFiles") 
dir.create(".../FolderToBeZipped") 
file.copy(from = ZipFiles,to = "C:/ZipFiles") 
zip(".../FolderToBeZipped", 
    files = "C:/ZipFiles") 
unlink("C:/ZipFiles",recursive = TRUE) 

结果则.../FolderToBeZipped.zip/ZipFiles/

的好处是,你不必在执行代码时位于子目录(或项目)内。

相关问题