我想递归地压缩文件夹,但排除某些目录(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/\*
不过我更喜欢引用:)