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为根目录的路径因而匹配失败