从 zip 存档中排除子目录 -- 请解释语法

从 zip 存档中排除子目录 -- 请解释语法

我想递归地压缩文件夹,但排除某些目录(temp/.hidden在下面的示例中)。我希望 zip 文件有一个顶级文件夹,如下temp例所示,因此我的工作目录是temp.

mkdir -p temp/subdir
touch temp/subdir/keepthisfile.txt
touch temp/excludethisfile.txt
mkdir temp/.hidden
touch temp/.hidden/exclude.txt
cd temp/

我必须实现我想要的代码是

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden/* ../temp/.hidden/

或者更简洁地说(语法取自网上其他地方)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/*.hidden*

我知道为什么这会起作用,但我不明白为什么下面的代码不能做同样的事情(即为什么我需要../temp/*.hidden*而不是仅仅../temp/.hidden*?)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden*

答案1

你的 shell在执行 Zip 之前会../temp/.hidden*展开;../temp/.hidden该模式不再匹配../temp/.hidden/exclude.txt。您应该按照 Zip 手册页的建议引用该模式:

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt '../temp/.hidden*'

答案2

谢谢!现在有了正确的 RFTM,我的手册页建议

反斜杠避免了 shell 文件名替换,因此 zip 在所有目录级别执行名称匹配。

所以代码就变成了 zip -r temp.zip ../temp/ -x ../temp/exclude.txt ../temp/.hidden/\*

不过我更喜欢引用:)

相关内容