我有一个项目,其中有很多隐藏的文件夹/文件。我想为其创建一个zip归档文件,但归档文件中不应包含任何隐藏的文件夹/文件。如果隐藏文件夹中的文件没有被隐藏,则也不应包含它们。

我知道我可以为以下目录创建zip存档:

zip -r zipfile.zip directory


我也知道我可以使用-x选项排除文件,所以我认为这可能起作用:
。所有隐藏的目录仍位于zip文件中。

#1 楼

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@


评论


感谢您的回答。该命令(查找community-chess / -path'* /。*'-prune -o -type f -print | zip〜/ community-chess.zip-@)的长度比预期的长,但可以正常使用。子目录也包括在内,因此+1和可接受的答案:-)

–马丁·托马
11年8月28日在9:17

#2 楼

首先,如果您尚未安装zip,请先按以下步骤安装它:

sudo apt-get install zip


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

zip -r compressed_filename.zip foldername


如果要排除隐藏文件:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@


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


创建zip存档时文件排除的基础以<43居中,并以-x标志为中心,该标志用于从存档中排除与特定名称或模式匹配的文件。从最基本的角度来看,它会像这样:

zip archive.zip files -x "ExcludeMe"


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

zip archive.zip images/ -x "Nothanks.jpg"


让我们介绍一些有用的特定示例。

从Zip存档中排除.DS_Store文件

此将防止通常不可见的Mac元数据.DS_Store
文件包含在zip存档中,这些文件由
默认捆绑在其中:
该目录包含子目录,但是,您将希望使用该命令的另一种形式来从子目录中排除ds_store文件


zip -r archivename.zip archivedirectory -x "*.DS_Store"


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

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

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

zip -r archive.zip directory -x "*/\.DS_Store"


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

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

压缩目录,减去.git及其内容:

zip -r archive.zip directory -x "*.jpg"


压缩文件夹,而不包含.svn目录:

zip -r zipdir.zip directorytozip -x "*.git*"


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

由于可以使用模式和通配符,因此可以还排除任何
或所有带有前缀的
不可见文件和文件夹,无论是像.svn这样的目录,还是像.bash_profile.htaccess这样的单个
文件。

zip -r zipped.zip directory -x "*.svn*"


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

zip -r archivename.zip directorytozip -x "*.*"



评论


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

– hmayag
15年8月11日在7:04

#3 楼

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

.开头的文件中的文件不会添加到zip文件中。

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


评论


我认为您的上一句话不正确。 。*将被外壳扩展。

– hammar
11年8月27日在22:11

我认为这可能是正确的,但我删除了它(不确定):)

–灵风
11年8月27日在22:22

这没有用。 .svn目录已添加

–马丁·托马
11年8月28日在9:13

@moose排除模式匹配完整路径,而不仅仅是文件基本名称,因此您需要排除* /。*和。*(* /匹配目录的任何非空序列)。

–吉尔斯'所以-不再是邪恶的'
2014年5月8日在17:21

无需更改即可运行!最佳答案。

–白猫
17-10-7在4:12

#4 楼

排除以开头的所有文件夹的示例。 :

tar cvpzf folder.tgz folder/ --exclude '.*'


压缩效果更好,但速度更慢:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'


#5 楼

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@


#6 楼

正确的方法是:

zip -r zipfile.zip directory -x directory/.*


评论


@downvoter:怎么了,这似乎对我有用。

–jobin
14年5月8日在16:55

与Rinzwind的原始答案(现已更正)相同的问题:您并未排除子目录。而且正如Rinzwind指出的那样,您需要引用通配符,否则shell会扩展它们。

–吉尔斯'所以-不再是邪恶的'
2014年5月8日17:25

#7 楼

在压缩目录以外的文件时,

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"


#8 楼

目录中没有隐藏的文件夹和文件:
zip -r zipfile.zip directory/*

目录:
|── .git
│   
├── src
│   └── Work.file
├── .test
│   └── .file
└── test.file

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)