如何在没有隐藏文件的情况下通过终端创建整个目录的 zip 存档?

Mar*_*oma 270 command-line zip

我有一个项目,里面有很多隐藏的文件夹/文件。我想为它创建一个 zip 存档,但存档中不应该有任何隐藏的文件夹/文件。如果隐藏文件夹中的文件不是隐藏的,它们也不应该被包含在内。

我知道我可以创建这样的目录的 zip 存档:

zip -r zipfile.zip directory
Run Code Online (Sandbox Code Playgroud)

我也知道我可以使用 -x 选项排除文件,所以我认为这可能有效:

zip -r zipfile.zip directory -x .*
Run Code Online (Sandbox Code Playgroud)

它没有用。所有隐藏目录仍在 zip 文件中。

M.A*_*pon 168

首先,如果您还没有安装 zip,请先安装它,如下所示:

sudo apt-get install zip
Run Code Online (Sandbox Code Playgroud)

然后简单地创建一个 zip 文件:

zip -r compressed_filename.zip foldername
Run Code Online (Sandbox Code Playgroud)

如果要排除隐藏文件:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@
Run Code Online (Sandbox Code Playgroud)

从 Zip 存档中排除文件 (取自http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/

创建 zip 存档时文件排除的基础以-x标志为中心,该标志用于从存档中排除匹配特定名称或模式的文件。在最基本的情况下,它看起来像这样:

zip archive.zip files -x "ExcludeMe"
Run Code Online (Sandbox Code Playgroud)

这意味着您可以排除单个文件,比如它名为“Nothanks.jpg”

zip archive.zip images/ -x "Nothanks.jpg"
Run Code Online (Sandbox Code Playgroud)

让我们介绍几个有用的具体示例。

从 Zip 档案中排除 .DS_Store 文件

这将防止通常不可见的 Mac 元数据.DS_Store 文件包含在 zip 存档中,这些文件默认捆绑在:

zip -r archivename.zip archivedirectory -x "*.DS_Store"
Run Code Online (Sandbox Code Playgroud)

但是,如果目录包含子目录,则您还需要使用该命令的另一个变体来从子目录中排除 ds_store 文件:

zip -r archive.zip directory -x "*/\.DS_Store"
Run Code Online (Sandbox Code Playgroud)

注意:并非所有 shell 都需要引号才能使该命令正常工作,但在 bash shell(OS X 的默认设置)中,您需要使用引号来排除通配符和模式。

从 Zip 存档中排除特定文件类型

使用通配符,您还可以通过关注扩展名来排除某种类型的所有文件。例如,此命令将压缩整个目录,减去任何.jpg文件:

zip -r archive.zip directory -x "*.jpg"
Run Code Online (Sandbox Code Playgroud)

可以针对文件名中匹配的任何特定文件扩展名或模式进行修改。

从 Zip 存档中排除 .git 或 .svn 目录

压缩一个目录,减去.git它的内容:

zip -r zipdir.zip directorytozip -x "*.git*"
Run Code Online (Sandbox Code Playgroud)

压缩一个文件夹,不包括.svn目录:

zip -r zipped.zip directory -x "*.svn*"
Run Code Online (Sandbox Code Playgroud)

从 Zip 存档中排除所有隐藏文件

由于模式和可以使用通配符,也可以排除由一个时期正在做前缀,所以任何或所有隐藏文件和文件夹,无论是像一个目录.svn或像一个单独的文件.bash_profile.htaccess

zip -r archivename.zip directorytozip -x "*.*"
Run Code Online (Sandbox Code Playgroud)

或者从所有子目录中排除所有不可见文件:

zip -r archive.zip directory -x "*/\.*"
Run Code Online (Sandbox Code Playgroud)

  • 感谢您为帮助 Ubuntu 用户所做的努力。请记住,在新答案中重新陈述已接受的答案只会增加混乱,并且很有可能被标记为删除。 (5认同)

arr*_*nge 123

这也排除了未隐藏目录中的隐藏文件:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答。命令 (`find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@`) 比预期的要长,但它工作正常。还包括子目录,因此 +1 和可接受的答案:-) (4认同)

Rin*_*ind 59

添加".*(否则,您的 shell 将扩展.*到当前目录中的点文件),并排除子目录中的隐藏文件:

zip -r zipfile.zip . -x ".*" -x "*/.*"
Run Code Online (Sandbox Code Playgroud)

这将导致以 a 开头的文件.不会被添加到您的 zip 文件中。

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
Run Code Online (Sandbox Code Playgroud)


小智 10

排除所有以 . :

tar cvpzf folder.tgz folder/ --exclude '.*'
Run Code Online (Sandbox Code Playgroud)

更好的压缩但更慢:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
Run Code Online (Sandbox Code Playgroud)


小智 9

这个包括所有的“。” 目录、子目录和“.” 目录中的文件或目录......本质上是第一个答案,但包括顶级“。” 文件。

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@
Run Code Online (Sandbox Code Playgroud)


小智 7

正确的方法是:

zip -r zipfile.zip directory -x directory/.*
Run Code Online (Sandbox Code Playgroud)


小智 7

目录中没有隐藏的文件夹和文件:

\n
zip -r zipfile.zip directory/*\n
Run Code Online (Sandbox Code Playgroud)\n

目录:

\n
|\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Work.file\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .file\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.file\n
Run Code Online (Sandbox Code Playgroud)\n
$ zip -r zipfile.zip directory/*\nadding: directory/src/ (stored 0%)\nadding: directory/src/Work.file (stored 0%)\nadding: directory/test.file (stored 0%)\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

压缩目录时不包括某些文件扩展名:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
Run Code Online (Sandbox Code Playgroud)