如何对目录中的所有文件和子目录进行 zip 压缩mydir
,除了以 开头的所有文件/目录.*
?
命令:
zip -r mydir.zip mydir/
...将包括所有内容。例如,如果我有:
mydir/foo
mydir/bar
mydir/.hello
我想要富和酒吧被包括在内mydir
,但不是。你好。
我怎样才能做到这一点?
答案1
这对我有用:
zip -r mydir.zip mydir -x "*/.*"
@Joe Internet,@Dariusz:正常的 shell 模式无法正常工作,因为 zip 内部与完整路径+文件名匹配(正如 zip 手册所解释的那样……;))
答案2
更短,并利用了通配符的特性:
zip -r mydir.zip mydir/*
(. 文件不包含在 * 通配符中)
请注意,目录“mydir/”可能不包含在生成的 zip 文件中的文件路径中,因此这会稍微改变输出。因此,您可能需要更改提取过程。
答案3
以下方法适用于此类目录树:
$ tree .
.
├── adir1
│ ├── afile1
│ ├── afile2
│ ├── afile3
│ └── afile4.txt
├── adir2
│ ├── afile1
│ ├── afile2
│ ├── afile3
│ └── afile4.txt
├── adir3
│ ├── afile1
│ ├── afile2
│ ├── afile3
│ └── afile4.txt
├── afile1
├── afile2
├── afile3
├── foo.test
这是适用于这种情况的解决方案(我相信这是更普遍的情况)。
$ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +
例子
$ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +
updating: adir1/afile1 (stored 0%)
updating: adir1/afile1.zip (stored 0%)
updating: adir1/afile2 (stored 0%)
updating: adir1/afile3 (stored 0%)
updating: adir1/afile4.txt (stored 0%)
updating: adir2/afile1 (stored 0%)
updating: adir2/afile2 (stored 0%)
updating: adir2/afile3 (stored 0%)
updating: adir2/afile4.txt (stored 0%)
updating: adir3/afile1 (stored 0%)
updating: adir3/afile2 (stored 0%)
updating: adir3/afile3 (stored 0%)
updating: adir3/afile4.txt (stored 0%)
updating: afile1 (stored 0%)
updating: afile2 (stored 0%)
updating: afile3 (stored 0%)
updating: foo.test (deflated 87%)
答案4
您可以使用 shell 模式来排除匹配项,所有内容都写在 zip 中手动的(附例子)