场景:有时打包压缩目录,想要排除忽略某些子文件和子目录,避免一些文件多体积大的不重要文件目录占用长期备份空间,且可以减少压缩工时。
?
\# 举例目录:
?
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为根目录的路径因而匹配失败
推荐阅读
- Linux运维|【Linux】浅谈文件描述符和重定向
- 云计算|Linux 文件系统与日志分析
- linux下删除文件名乱码文件
- 【clearos】安装clearos系统
- pem pfx 是什么文件
- linux时间管理
- linux运维|GraphicsMagick命令行使用示例
- linux运维|网站框架演变
- 初识 etcd