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

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

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

到目前为止我有这个:

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

但这似乎不起作用。

我也试过

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

但是这仍然会包括 ignoreDir1 和 ignoreDir2 内的子目录。

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

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

答案1

我实际需要的命令是:

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

答案2

对于我的特定系统 (Mac OS),为了排除目录,我必须在排除的目录周围加上引号,而且效果非常好。您需要这样做,因为有时目录和文件的名称中可能含有空格和特殊字符,如果不使用引号,则会导致此操作失败。这比转义空格和特殊字符更容易。

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

笔记:

——这将排除要排除的目录及其内部的所有文件。

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

答案3

@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

答案4

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

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

相关内容