我有一个项目,里面有很多隐藏文件夹/文件。我想创建一个 zip 存档,但存档中不应该有任何隐藏文件夹/文件。如果隐藏文件夹中的文件没有被隐藏,它们也不应该被包括在内。
我知道我可以创建一个像这样的目录的 zip 存档:
zip -r zipfile.zip directory
我也知道我可以使用 -x 选项排除文件,所以我认为这可能会有效:
zip -r zipfile.zip directory -x .*
它不起作用。所有隐藏目录仍在 zip 文件中。
答案1
首先,如果您还没有安装 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 存档时文件排除的基本操作以标志为中心
-x
,该标志用于从存档中排除与特定名称或模式匹配的文件。最基本的操作如下所示:zip archive.zip files -x "ExcludeMe"
这意味着你可以排除一个文件,比如说它的名字是“Nothanks.jpg”
zip archive.zip images/ -x "Nothanks.jpg"
让我们介绍几个有用的具体例子。
从 Zip 档案中排除 .DS_Store 文件
这将防止通常不可见的 Mac 元数据
.DS_Store
文件被包含在 zip 存档中,这些文件默认捆绑在 zip 存档中:zip -r archivename.zip archivedirectory -x "*.DS_Store"
但是,如果目录包含子目录,您将需要使用该命令的另一种变体来从子目录中排除 ds_store 文件:
zip -r archive.zip directory -x "*/\.DS_Store"
注意:并非所有 shell 都需要引号才能使此命令正常工作,但在 bash shell(OS X 的默认设置)中,您需要使用引号来排除通配符和模式。
从 Zip 存档中排除特定文件类型
使用通配符,您还可以通过关注扩展名来排除特定类型的所有文件。例如,此命令将压缩整个目录,减去任何
.jpg
文件:zip -r archive.zip directory -x "*.jpg"
可以针对文件名中匹配的任何特定文件扩展名或模式进行修改。
从 Zip 存档中排除 .git 或 .svn 目录
将目录压缩,减去
.git
其内容:zip -r zipdir.zip directorytozip -x "*.git*"
压缩文件夹,但不包含
.svn
目录:zip -r zipped.zip directory -x "*.svn*"
从 Zip 档案中排除所有隐藏文件
由于可以使用模式和通配符,您还可以排除任何或所有以句点为前缀的不可见文件和文件夹,无论它是像 这样的目录还是像这样
.svn
的单个文件。.bash_profile
.htaccess
zip -r archivename.zip directorytozip -x "*.*"
或者从所有子目录中排除所有不可见的文件:
zip -r archive.zip directory -x "*/\.*"
答案2
这也排除了非隐藏目录中的隐藏文件:
find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
答案3
添加"
到.*
(否则,你的 shell 将扩展.*
为当前目录中的点文件),并且排除子目录中的隐藏文件:
zip -r zipfile.zip . -x ".*" -x "*/.*"
这将导致以 开头的文件.
不会被添加到您的 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%)
答案4
这个包括所有“。”目录,子目录和“。”文件或目录中的目录...本质上是第一个答案,但包括顶级“。”文件。
find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@