使用7z压缩文件夹中除一个文件或一个文件类型以外的所有内容

18

我想要压缩除一个文件以外的所有内容。

7z a -tzip files.zip *

这将压缩我当前目录中的所有文件..有没有办法告诉它不要压缩一个文件或一个文件类型?

3个回答

25
根据7za命令行帮助,您需要使用-x开关来完成此操作:
-x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames

为了排除文件foo.txt,您需要添加:

-x!foo.txt

要排除所有的 .html 文件(*.html),您需要添加:

-x!*.html

您可以在一个zip命令中添加多个-x条目,以排除多个文件名和/或通配符。 添加以下内容将排除foo.txt和*.html:

您可以在一个zip命令中添加多个-x条目,以排除多个文件名和/或通配符。添加以下内容将排除foo.txt和*.html:

-x!foo.txt -x!*.html

那么以您的示例为例,这将添加除“FILENAME”命名的文件或符合*.extension通配符的文件之外的所有文件到files.zip中:

7z a -tzip files.zip * -x!FILENAME -x!*.extension

2
供日后参考:-x!*.extension 不起作用(至少对于递归子目录而言)。-x!*extension 起作用。 - Samaursa
3
在PowerShell中,使用“-xr!.扩展名”来递归地忽略所有的“.扩展名”。请注意引号。 - Chris Kolenko
2
在PowerShell中排除Git相关的文件和文件夹,请添加"-xr!.git\""-xr!.gitignore"。请注意,如@ChrisKolenko所述,要使用双引号(")。 - craig
你的示例假设目标目录是当前目录。如果目标目录不是当前目录,你会如何构造命令? - johny why

11

如果您正在使用批处理脚本,请不要忘记转义!标记。

7z a -xr^^!*.xml "dest_dir.zip" "Source_dir"

我在GitLab CI中使用了7z命令,但它卡住了。"-xr^^!*.xml"解决了问题。感谢您提供的解决方案! - mrhotroad
我认为这里多了一个^符号...^^ 对我没用,这个可以用:7z a -xr^!*.xml "dest_dir.zip" "Source_dir" - nenea

1

要排除单个文件或通配符条目,命令行选项似乎不起作用。相反,将要排除的文件和通配符列在文本文件(..\xlist.txt)中,并在命令行中指定如下:

7z a -tzip files.zip * -xr@..\xlist.txt

使用相对路径指定xlist.txt。

xlist.txt的内容:

xlist.txt itself if you dont want it
index*
*.js
*.tmp
etc...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接