Unix zip 目录,但排除了特定的子目录(以及其中的所有内容)

sul*_*man 168 unix zip exclude

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

到目前为止,我有这个:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 
Run Code Online (Sandbox Code Playgroud)

不过这似乎行不通。

我也试过

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*
Run Code Online (Sandbox Code Playgroud)

但是,这仍将包括 ignoreDir1 和 ignoreDir2 中的子目录。

我要排除的目录中的子目录结构非常庞大,因此我不能简单地将每个目录添加到 -x 参数中。

有谁知道如何做到这一点?

sul*_*man 180

我离得那么近!

我需要的实际命令是:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
Run Code Online (Sandbox Code Playgroud)

  • 而不是这样:-x dir1/ignoreDir1/**\\*,你可以这样做:-x dir1/ignoreDir1/\\* (24认同)
  • 这对我有用 `zip -r theme.zip ./theme -x ./theme/node_modules/\*` (9认同)
  • 在 MacOS 上,我成功使用: `zip -r theme.zip theme -x theme/node_modules/\*` 或 `zip -r theme.zip theme -x "theme/node_modules/*"` (5认同)
  • 这在 osx 上对我不起作用。@pathfiler 的回答确实如此。 (2认同)

小智 109

对于我的特定系统,为了排除目录,我必须在排除的目录周围加上引号,它的作用就像一个魅力:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"
Run Code Online (Sandbox Code Playgroud)

笔记:

-- 这排除了要排除的目录和其中的所有文件。

-- 您必须使用要排除的目录的完整路径!

  • 由于没有人解释需要引用路径或转义星号的原因,原因是:如果路径没有被引用或通配符被转义,shell 将在**将它们传递给 `zip` 之前执行通配符扩展** ,它将接收到指定目录中条目的路径列表,但不会接收到这些子目录中文件的路径,从而导致 `zip` 不会忽略给定目录下的所有内容。 (14认同)
  • 这是适用于 Mac OS 的一种。:-) (11认同)

Gia*_* P. 12

@sulman 使用:

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

仍然会在 zip 存档中包含 dir1/ignoreDir1/ 空文件夹,使用:

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

可以解决问题,您还可以使用前导 ** 在子文件夹中进行搜索,而不仅仅是 dir1


eri*_*icn 8

以下将做

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%)
Run Code Online (Sandbox Code Playgroud)