Tar 压缩时通配符的问题

本文探讨了在程序结束时压缩日志文件以节省硬盘空间和提高传输效率的方法。通过使用tar命令的不同选项,如-C和通配符,可以有效去除压缩包内的全路径,简化操作流程。文章还详细解释了如何在不同路径下正确使用tar命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

因为程序生成的日志很大,而通过压缩可以达到10%的压缩率,所以在程序结束时将日志压缩成gz包,这样可以节省硬盘空间和传输效率。

实际使用中,把日志放在了/tmp文件夹下,而程序不定在哪个文件夹下,所以一开始使用的压缩命令行如下tar -czvPf /tmp/test.tar.gz /tmp/*.log,打开压缩包发现包内有全路径,需要多次进入后才能看到log文件。这使操作略微不便。

尝试

百度后,得知可以用-C /tmp去除压缩包内的全路径的——嗯,用tar -czvPf /tmp/test.tar.gz -C /tmp aa.log bb.log的确没路径了。

然后用tar -czvPf /tmp/test.tar.gz -C /tmp *.log就报错:找不到*.log这文件。

【Tar 压缩时 -C *的问题】中提到,通配符是由Shell进行展开的,所以在tar命令执行前*.log已经被扩展成了aa.log bb.log

而这Shell通配符扩展需要在全路径下或当前路径下,因为tar -czvPf /tmp/test.tar.gz -C /tmp *.log这个中用的是相对路径,所以在shell的当前路径下扩展*.log
奇怪的是,如果Shell 在当前路径扩展不了*.log,怎么还会把*.log作为参数传给tar呢。

所以还是使用cd /tmp && tar -czvf test.tar.gz *.log更加地简单明了了吧。

结论

去除包内全路径,并且使用通配符,需要使用cd /tmp && tar -czvf test.tar.gz *.log

### Linux `tar` 命令用于文件压缩 #### 使用 `tar` 打包并压缩文件 为了创建一个 `.tar.gz` 文件,即先打包再使用 gzip 进行压缩,可以采用如下命令: ```bash tar -zcvf /path/to/output.tar.gz /path/to/source_directory_or_file ``` 这里 `-zcvf` 参数的具体含义为: - z 表示通过 gzip 程序过滤归档; - c 创建新的归档文件; - v 显示处理过程中的文件信息(可选); - f 后跟要创建的存档名称。 例如,如果希望将 `/etc` 目录下的所有内容打包并压缩到 `/tmp/etc.tar.gz` 中,则执行上述命令即可完成此操作[^2]。 #### 不同类型的压缩方式 除了 gzip 外,还可以利用其他算法来压缩 tar 归档。对于 bzip2 和 xz 的支持分别对应参数 `-j` 和 `-J`: - **bzip2**: 使用 bzip2 来代替默认的 gzip 对 tarball 进行更高效的压缩。 ```bash tar -jcvf archive_name.tbz source_files... ``` - **xz**: 提供更高的压缩率但是可能较慢的速度。 ```bash tar -Jcvf archive_name.txz source_files... ``` 另外,也可以不加任何额外的字母标记仅生成 .tar 格式的未压缩档案。 #### 特定模式下工作 当面对特定需求,比如只包含某些扩展名的文件或排除指定路径之外的内容,可以通过附加选项进一步定制行为: - 添加多个源位置作为输入; - 利用通配符匹配目标集内的项目; - 排除不需要被打入包里的子目录/文件列表。 这些高级特性使得 tar 成为了非常灵活实用的小型工具之一,在日常管理和维护工作中不可或缺。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值