tar命令无法更新已存在的压缩包

本文介绍了一种利用Shell脚本实现数据文件批量打包的方法,针对tar命令无法直接更新压缩文件的问题,提出了使用zip命令替代的解决方案,并给出了具体的Shell脚本示例。

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

前两天同学用linux做实验后想把实验数据每隔20个步长打包后发给老师,但是不会写shell,所以只能一个一个拉出来复制打包,很是浪费时间。今天我想着写一个shell来解决这个问题。

#!/bin/bash
for((num=20;num<1000;num=num+20))
do
    tar -jrvf send.tar.bz2 ${num}.jpg
done

但是在运行shell的时候提示

tar:Cannot update compressed archives

查询后发现是tar命令无法对压缩文件进行更新(如果文件未经过压缩,则可以通过tar -rvf命令实现文件添加)。对于想要通过tar命令更新压缩文件,则只能通过解压压缩文件并更新后重新压缩这一方式实现。

或者,为了更好的解决这个问题,可以使用zip命令,其中-g选项可以将文件添加在已有的压缩文件之后,而非建立新的压缩文件。

#!/bin/bash
for((num=20;num<1000;num=num+20))
do
    zip -q send.zip ${num}.jpg
done
在解压时使用unzip命令即可。


### Linux 解压 tar 压缩包命令Linux 系统中,`tar` 是用于处理归档文件的强大工具。它支持多种压缩格式,并可以通过不同的选项实现解压操作。以下是针对不同 `.tar` 后缀压缩包的具体解压命令: #### 通用解压语法 对于较新版本的 `tar`(1.15 及以上),可以直接通过以下命令解压各种格式的 `.tar` 文件,无需手动指定具体的压缩算法: ```bash tar -xvf filename.tar.* ``` 如果需要更精确的操作,则可以根据具体扩展名选择对应的参数。 --- #### 针对特定后缀的解压命令 1. **`.tar.gz` 或 `.tgz`** 对于使用 gzip 压缩的 `.tar.gz` 或 `.tgz` 文件,可以运行以下命令: ```bash tar -zxvf filename.tar.gz ``` 参数解释: - `-z` 表示使用 gzip 进行解压缩。 - `-x` 表示提取文件。 - `-v` 显示详细的解压过程。 - `-f` 指定目标文件名称[^2]。 2. **`.tar.bz2`** 如果是使用 bzip2 压缩的 `.tar.bz2` 文件,可执行如下命令: ```bash tar -jxvf filename.tar.bz2 ``` 参数中的 `-j` 表明调用了 bzip2 的解压缩功能[^3]。 3. **`.tar.xz`** 当面对采用 xz 压缩方式生成的 `.tar.xz` 文件时,应使用此命令: ```bash tar -Jxvf filename.tar.xz ``` 此处的 `-J` 负责启动 xz 的解压缩机制[^4]。 4. **`.tar.Z`** 若遇到旧式 Z 压缩技术产生的 `.tar.Z` 文件,则适用下面这条指令: ```bash tar -Zxvf filename.tar.Z ``` 上述例子里 `-Z` 将激活相应的解压缩逻辑[^3]。 --- #### 示例演示 假设当前目录存在一个名为 `example.tar.gz` 的压缩包,那么可以用下列代码将其展开到本地路径下: ```bash tar -zxvf example.tar.gz ``` 同样地,如果有另一个叫做 `data.tar.bz2` 的存档文件,我们也可以轻松恢复其原始数据集: ```bash tar -jxvf data.tar.bz2 ``` 最后,当碰到现代高效的 `archive.tar.xz` 类型资源时,只需简单输入这一串字符即可完成整个流程: ```bash tar -Jxvf archive.tar.xz ``` --- ### 注意事项 - 在某些情况下可能还需要额外加入 `-C` 参数来定义输出位置,比如把所有内容都放到 `/target/directory/` 中去的话就应该是这样写成: ```bash tar -zxvf sourcefile.tar.gz -C /target/directory/ ``` - 不同操作系统自带的 GNU Tar 版本可能存在差异,请确保已安装最新稳定版以获得最佳兼容性和性能表现。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值