如何压缩当前所在文件夹的内容(不包括隐藏文件和文件夹)?
zip -r extension.xpi . -x "*/.*"
这是我到目前为止所拥有的,但我仍然收到隐藏文件。
答案1
您*/.*
将只包含子目录中的隐藏文件。但不在当前目录或子目录的子目录中。试试这个zip -r extension.xpi . -x ".*"
或那个zip -r extension.xpi . -x .\*
。
我想反斜杠应该是关键,这是手册页中的引用:
显式排除指定的文件,如下所示:
zip -r foo foo -x \*.o
这将包括 foo.zip 中 foo 的内容,同时排除所有以 .o 结尾的文件。反斜杠避免了 shell 文件名替换,因此 zip 在所有目录级别执行名称匹配。
答案2
接受的答案不适用于以下测试目录结构:
$ 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%)