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

场景:有时打包压缩目录,想要排除忽略某些子文件和子目录,避免一些文件多体积大的不重要文件目录占用长期备份空间,且可以减少压缩工时。
?
\# 举例目录:
?

tmp #想要打包的目录 ├─ aaa #目录 ├─ bbb #目录 ├─ ccc.txt #文件 └─ ddd.txt #文件

?
\# 7z排除/忽略指定目录和文件的命令示范:
?
7z a -t7ztmp.7z ./tmp'-xr!aaa/' '-xr!ccc.txt'

?
#压缩包里的内容成功排除了aaa目录和ccc.txt文件,只剩下bbb目录和ddd.txt文件: tmp.7z ├─ bbb └─ ddd.txt

【7z压缩时排除指定文件或目录】?
\# 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 -t7ztmp.7z ./tmp'-xr!aaa' '-xr!ccc.txt' #√ aaa有效 7z a -t7ztmp.7z ./tmp'-xr!aaa/' '-xr!ccc.txt' #√ aaa/有效 ? 7z a -t7ztmp.7z ./tmp'-xr!/aaa/' '-xr!ccc.txt' #× 不匹配 /aaa/二次运行会提示内部文件名冲突 7z a -t7ztmp.7z ./tmp'-xr!/aaa' '-xr!ccc.txt' #×不匹配 /aaa二次运行会提示内部文件名冲突 ? 7z a -t7ztmp.7z ./tmp'-xr!*tmp/aaa' '-xr!ccc.txt' #√ *tmp/aaa通配符有效 7z a -t7ztmp.7z ./tmp'-xr!*tmp/aaa/' '-xr!ccc.txt' #√ *tmp/aaa/通配符有效 7z a -t7ztmp.7z ./tmp'-xr!./aaa/' '-xr!ccc.txt' #√ ./aaa/相对路径语法有效 ? 7z a -t7ztmp.7z ./tmp'-xr!tmp/aaa/' '-xr!ccc.txt' #√ 以tmp作为根目录的绝对路径语法有效 ? 7z a -t7ztmp.7z ./tmp'-xr!/tmp/aaa' '-xr!ccc.txt' #× 不匹配 /tmp/aaa不应超出tmp/根目录 7z a -t7ztmp.7z ./tmp'-xr!./tmp/aaa/' '-xr!ccc.txt' #× 不匹配 ./tmp/aaa/不应超出tmp/根目录 ? 7z a -t7ztmp.7z ./tmp'-xr!/root/tmp/aaa/' '-xr!ccc.txt' #× /root/tmp/aaa主机绝对路径被7z解读成以tmp为根目录的路径因而匹配失败

    推荐阅读