我正在尝试压缩一个目录(在 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/\*