2011-07-19 10:19:13 +0000 2011-07-19 10:19:13 +0000
121
121

Unix压缩目录,但不包括特定的子目录(以及其中的所有内容)。

我正在尝试压缩一个目录(在Unix上通过SSH),但我需要排除几个子目录(以及其中的所有文件和目录)。

到目前为止,我有这样的结果。

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/*

这似乎并不奏效。

我也试过

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

然而这仍然会包含ignoreDir1和ignoreDir2中的子目录。

我想排除的目录中的子目录结构相当大,所以我不能简单地将每个目录添加到-x参数中。

有谁知道怎么做?

答案 (7)

134
134
134
2011-07-19 10:32:23 +0000

我就差一点

我需要的实际命令是:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/ **\* dir1/ignoreDir2/** \*
``` 。
73
73
73
2012-10-31 11:43:43 +0000

在我的系统中,为了排除一个目录,我不得不在被排除的目录周围加上引号,结果效果非常好:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

Notes:

– 这既排除了要排除的目录,也排除了它里面的所有文件。

– 你必须使用你要排除的目录的完整路径!

9
9
9
2013-10-30 11:31:16 +0000

@sulman 使用:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\*\*\* dir1/ignoreDir2/\*\*\*

仍然会在压缩包中包含dir1/ignoreDir1/空文件夹,使用:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\*\* dir1/ignoreDir2\*\*

就可以了,你也可以使用前导的 ***来搜索子文件夹,而不是只搜索dir1。

7
7
7
2012-09-17 05:00:36 +0000

下面的步骤可以做到

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

你需要**做什么,@sulman?

对我来说,它的工作原理如下。

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root 8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)
1
1
1
2016-01-22 14:39:17 +0000

就像其他答案一样,但完全排除目录,而不是排除目录的所有内容。

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
0
0
0
2014-10-03 18:28:57 +0000

我发现这个从David R Heffelfinger:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

它排除了目录及其内容。

-1
-1
-1
2015-12-01 13:29:01 +0000

对我来说,工作: zip -9 -r ~/folded.zip online -x folder/folder2/folder3/foldern/ /*.

似乎是星号必须要转义。