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


6

如何压缩目录中所有文件和子目录的压缩文件mydir,但所有以/开头的文件/目录除外.*

命令:

zip -r mydir.zip mydir/

...将包括一切。例如,如果我有:

mydir/foo
mydir/bar
mydir/.hello

我希望将foobar包括在内mydir,但不包括.hello

我怎样才能做到这一点?

Answers:


8

这对我有用:

zip -r mydir.zip mydir -x "*/.*"

@Joe Internet,@ Dariusz:正常的外壳模式将无法正常工作,因为zip内部匹配完整的路径名和文件名(如zip手册中解释的...;))


1
克莱斯(Claeys)-我的示例为我效劳,但为了公平起见,我在Win7下使用了Ch Shell(包括zip)。我将CD放入测试目录,并使用'zip -r test.zip ./ -x。*。*'(减去单引号)。如果我使用'zip -r mydir.zip mydir -x“ /。 ”'(减去单引号),则它不会排除测试目录中的隐藏文件。我想这取决于用于测试的外壳之间的差异。
Joe Internet,2010年

1

您可以使用外壳模式排除匹配项,所有内容均以zip 手册编写(带有示例)


1

如果您更喜欢复杂的过滤功能,则查找是一个很好的工具:

find mydir/ -! -name ".hello" -print | zip mydir -@

享受“发现”的乐趣。


1

以下方法适用于这种类型的目录树:

$ 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%)


0

更短,并且利用了globbing的功能:

zip -r mydir.zip mydir/*

(。文件不包含在*通配符中)

请注意,目录“ mydir /”可能不包含在生成的zip文件中的文件路径中,因此这将稍微改变输出。结果,您可能必须更改提取过程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.