场景:有时打包压缩目录,想要排除疏忽某些子文件和子目录,防止一些文件多体积大的不重要文件目录占用长期备份空间,且能够缩小压缩工时。

\# 举例目录:

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


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

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

#压缩包里的内容胜利排除了aaa目录和ccc.txt文件,只剩下bbb目录和ddd.txt文件:tmp.7z├─ bbb└─ ddd.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为根目录的门路因此匹配失败