![Unix zip 目录但排除特定子目录(及其中的所有内容)](https://linux22.com/image/1283476/Unix%20zip%20%E7%9B%AE%E5%BD%95%E4%BD%86%E6%8E%92%E9%99%A4%E7%89%B9%E5%AE%9A%E5%AD%90%E7%9B%AE%E5%BD%95%EF%BC%88%E5%8F%8A%E5%85%B6%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%EF%BC%89.png)
我正在尝试压缩一个目录(在 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/\*