我知道我可以为以下目录创建zip存档:
zip -r zipfile.zip directory
我也知道我可以使用-x选项排除文件,所以我认为这可能起作用:
。所有隐藏的目录仍位于zip文件中。
#1 楼
这也排除了未隐藏目录中的隐藏文件:find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
#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%)
评论
感谢您的回答。该命令(查找community-chess / -path'* /。*'-prune -o -type f -print | zip〜/ community-chess.zip-@)的长度比预期的长,但可以正常使用。子目录也包括在内,因此+1和可接受的答案:-)
–马丁·托马
11年8月28日在9:17