压缩目录中除隐藏文件之外的所有文件/目录?

压缩目录中除隐藏文件之外的所有文件/目录?

如何对目录中的所有文件和子目录进行 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 中手动的(附例子)

相关内容