Linux tar 命令 将归档内指定文件解压到指定目录

本文详细介绍Linux下的tar命令,包括创建、解压、查看归档文件等操作,并通过具体实例讲解如何运用tar命令及其选项来实现文件的高效管理和压缩。

首先介绍一下 tar 命令:

用途:打包文件(制作归档文件)、释放归档文件

格式:

       tar  [选项]...  归档文件名  源文件或目录

       tar  [选项]...   归档文件名  [-C  目标目录]

 

常用命令选项:

 

  -c 

创建 .tar 格式的包文件
  -x解开 .tar 格式的包文件
  -v输出详细信息
  -f  表示使用归档文件
  -t列表查看包内的文件
  -p保持源文件的原来属性
  -P保持源文件的绝对路径
  -C建包或解包时进入指定的目录
  -z调用gzip程序进行压缩或解压
  -j调用bzip2程序进行压缩或解压
  -J调用XZ程序进行压缩或解压
  -A将归档文件追加到另一个归档文件中

 

现在根据一个练习题来讲一下tar命令和选项的具体应用:

第一步:

[root@dbserver02 ~]# tar cf /tmp/sxkj.tar -C /etc group passwd shadow

第二步:

[root@dbserver02 ~]# tar -tvf /tmp/sxkj.tar
-rw-r--r-- root/root       707 2018-11-23 21:30 group
-rw-r--r-- root/root      1524 2018-11-23 21:41 passwd
---------- root/root      1125 2018-11-23 21:45 shadow

第三步:

[root@dbserver02 ~]# tar rf /tmp/sxkj.tar .bashrc

然后可以查看sxkj.tar里面的内容:

[root@dbserver02 ~]# tar -tvf /tmp/sxkj.tar
-rw-r--r-- root/root       707 2018-11-23 21:30 group
-rw-r--r-- root/root      1524 2018-11-23 21:41 passwd
---------- root/root      1125 2018-11-23 21:45 shadow
-rw-r--r-- root/root       176 2004-09-23 11:59 .bashrc

第四步:

已经知道sxkj.tar包里有四个文件,现在要求把其中的指定的一个文件解压到指定的 /tmp 目录;这是难点所在,代码如下:

[root@dbserver02 ~]# tar xvf /tmp/sxkj.tar -C /home group
group

注意:此处把包里的group文件放到了全部命令的最后。

第五步:

[root@dbserver02 ~]# tar cjvf /tmp/home.tar.bz2 /home
tar: Removing leading `/' from member names
/home/
/home/group

这里要求把路径中的 “ / ” 删除,因为在解压缩的过程中一定要注意绝对路径相对路径问题,推荐使用相对路径。如果使用了绝对路径,系统会自动修改成相对路径。

第六步:

[root@dbserver02 ~]# tar xjvf /tmp/home.tar.bz2 -C /tmp
home/
home/group
[root@dbserver02 ~]# ls /tmp
home  home.tar.bz2  sxkj.tar

可以看到目录/tmp下已经有了home目录。

 

熟练掌握这个练习就应该可以掌握tar命令了。

 

 

### Linux解压 `.tar.gz` 文件并将指定文件提取到特定目录Linux 中,可以使用 `tar` 命令来处理 `.tar.gz` 文件。如果需要将 `.tar.gz` 文件中的某个具体文件提取到指定目录,则可以通过组合 `-C` 和其他选项实现。 以下是具体的说明: #### 使用方法 当需要从 `.tar.gz` 文件中提取单个或多个指定文件并将其放置到目标目录时,可按照以下方式操作: 1. **基本语法** ```bash tar -xzvf archive.tar.gz path/to/file/in/archive -C /destination/directory/ ``` 这里: - `-x`: 表示解压; - `-z`: 表示通过 gzip 解压缩; - `-v`: 显示详细的解压过程(可选); - `-f`: 指定要操作的文件名; - `path/to/file/in/archive`: 是指 `.tar.gz` 归档内的相对路径; - `-C /destination/directory/`: 将解压后的文件放到 `/destination/directory/` 路径下[^2]。 2. **注意事项** - 如果目标目录 `/destination/directory/` 不存在,需提前手动创建,因为 `tar` 不会自动创建缺失的目标目录[^2]。 - 提取的文件路径应基于归档内部的实际路径。例如,在 `archive.tar.gz` 中存在 `folder/subfile.txt`,则需要显式提供此路径作为参数。 3. **实例演示** 假设当前工作目录中有名为 `example.tar.gz` 的存档文件,其中包含如下结构: ``` /example/folder1/fileA.txt /example/folder2/fileB.txt ``` 现在希望仅提取 `fileA.txt` 并将其放入 `/tmp/output/` 目录中。 执行以下命令前,请确认 `/tmp/output/` 已经存在: ```bash mkdir -p /tmp/output/ ``` 接着运行下面的命令完成提取: ```bash tar -xzvf example.tar.gz example/folder1/fileA.txt -C /tmp/output/ ``` 这一步骤将会把 `fileA.txt` 放置到 `/tmp/output/` 中[^2]。 --- ### 完整脚本示例 为了更清晰展示整个流程,这里给出一段完整的 Shell 脚本用于自动化这一任务: ```bash #!/bin/bash SOURCE_ARCHIVE="example.tar.gz" TARGET_FILE="example/folder1/fileA.txt" DESTINATION_DIR="/tmp/output/" # 创建目标目录 (如果尚不存在) mkdir -p "$DESTINATION_DIR" # 执行解压与提取 tar -xzvf "$SOURCE_ARCHIVE" "$TARGET_FILE" -C "$DESTINATION_DIR" ``` 以上脚本定义了解压源档案、目标文件以及最终存储位置,并确保即使目标目录尚未建立也能正常运作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值