场景:有时打包压缩目录,想要排除疏忽某些子文件和子目录,防止一些文件多体积大的不重要文件目录占用长期备份空间,且能够缩小压缩工时。
\# 举例目录:
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 为根目录的门路因此匹配失败