7z压缩时排除指定文件或目录

发布时间 2023-03-22 21:14:24作者: 伊索

https://zhuanlan.zhihu.com/p/488024718

# 举例目录:

tmp #目录
├─ aaa #目录
├─ bbb #目录
├─ ccc.txt #文件
└─ ddd.txt #文件

 

# 7z排除/忽略指定目录和文件的命令示范:

7z a -t7z  tmp.7z ./tmp  '-xr!aaa/' '-xr!ccc.txt'

压缩包里的内容成功排除了aaa文件夹和ccc.txt文件:

 

# 7z参数解释

tmp.7z 是压缩包的文件名
./tmp 是想要压缩的目录

a 代表添加文件/文件夹到压缩包
-t 是指定压缩类型 一般我们定为7z
-xr! 是排除文件夹和文件,*注意:'!'感叹号在Linux中是系统特殊事件符号,在Shell命令中使用时需加''单引号转义成普通字符串。

 

# 7z路径规则:

路径规则:7z语法中的路径规则,是以压缩目标为根目录,
比如“7z a tmp.7z ./tmp”中,“tmp/”就是7z语法中所有路径的最顶层,因此使用主机绝对路径就不能正确匹配,
“tmp
/aaa/”在主机中的绝对路径是“root/tmp/aaa/”,如果在7z语法中是使用“root/tmp/aaa/”,7z程序里实际解读的是“tmp/root/tmp/aaa/”。 举例:我们要压缩tmp/目录和排除tmp/下的aaa/目录: 7z a -t7z tmp.7z ./tmp '-xr!aaa' '-xr!ccc.txt' #√ aaa有效 7z a -t7z tmp.7z ./tmp '-xr!aaa/' '-xr!ccc.txt' #√ aaa/有效 7z a -t7z tmp.7z ./tmp '-xr!/aaa/' '-xr!ccc.txt' #× 不匹配 /aaa/二次运行会提示内部文件名冲突 7z a -t7z tmp.7z ./tmp '-xr!/aaa' '-xr!ccc.txt' #×不匹配 /aaa二次运行会提示内部文件名冲突 7z a -t7z tmp.7z ./tmp '-xr!*tmp/aaa' '-xr!ccc.txt' #√ *tmp/aaa通配符有效 7z a -t7z tmp.7z ./tmp '-xr!*tmp/aaa/' '-xr!ccc.txt' #√ *tmp/aaa/通配符有效 7z a -t7z tmp.7z ./tmp '-xr!./aaa/' '-xr!ccc.txt' #√ ./aaa/相对路径语法有效 7z a -t7z tmp.7z ./tmp '-xr!tmp/aaa/' '-xr!ccc.txt' #√ 以tmp作为根目录的绝对路径语法有效 7z a -t7z tmp.7z ./tmp '-xr!/tmp/aaa' '-xr!ccc.txt' #× 不匹配 /tmp/aaa不应超出tmp/根目录 7z a -t7z tmp.7z ./tmp '-xr!./tmp/aaa/' '-xr!ccc.txt' #× 不匹配 ./tmp/aaa/不应超出tmp/根目录 7z a -t7z tmp.7z ./tmp '-xr!/root/tmp/aaa/' '-xr!ccc.txt' #× /root/tmp/aaa主机绝对路径被7z解读成以tmp为根目录的路径因而匹配失败