tar 打包文件--- 不包含文件所在路径的方法

本文详细介绍了在使用tar工具进行文件打包和解压时如何处理路径问题,包括避免打包路径的方法和解压tar包到指定位置的技巧。通过具体实例展示了如何使用-C参数和在目标目录内直接执行打包命令来实现。

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

我们在使用tar打包的时候,默认会把路径打进去,也就是说解包的时候是带路径的,如下:

1、在/root/下有t1.txt和t2.txt 两个文件:
[root ~]$ ll
-rw-r--r--  1 root root       3 Jun  6 12:09 t1.txt
-rw-r--r--  1 root root       3 Jun  6 12:09 t2.txt

2、将这两个文件归档:
[root ~]$ tar -cvzf t.tar /root/t1.txt /root/t2.txt 
tar: Removing leading `/' from member names
/root/t1.txt
/root/t2.txt

[root ~]$ ll
-rw-r--r--  1 root root       3 Jun  6 12:09 t1.txt
-rw-r--r--  1 root root       3 Jun  6 12:09 t2.txt
-rw-r--r--  1 root root     138 Jun  6 12:10 t.tar

3、将t.tar包拷贝到/data目录下然后解压:
[root ~] $ mv t.tar /data/

[root ~] $ cd /data/
[root data]$ tar -xvzf t.tar 
root/t1.txt
root/t2.txt

此时,我们可以看到,在/data下自动建立了root目录,然后把t1、t2两个文件放进去了

[root data]$ ll /data/root/
total 8
-rw-r--r-- 1 root root 3 Jun  6 12:09 t1.txt
-rw-r--r-- 1 root root 3 Jun  6 12:09 t2.txt

一、解决打包不包含路径问题

1、进入目录内,执行打包命令:

$ cd /root/test

$ pwd
/root/test

$ ll
-rw-r--r-- 1 root root   0 Jun  6 12:15 t1.txt
-rw-r--r-- 1 root root   0 Jun  6 12:15 t2.txt


$ tar -cvzf tt.tar *
t1.txt
t2.txt


$ ll
total 4
-rw-r--r-- 1 root root   0 Jun  6 12:15 t1.txt
-rw-r--r-- 1 root root   0 Jun  6 12:15 t2.txt
-rw-r--r-- 1 root root 121 Jun  6 12:15 tt.tar

这时,打的tt.tar就不包含路径了,把tt.tar拷贝到/data 下,然后解压:

$ mv tt.tar /data/
[root]$ cd /data/
[root]$ tar -xvzf tt.tar 
t1.txt
t2.txt

[root]$ ll
-rw-r--r--  1 root root          0 Jun  6 12:15 t1.txt
-rw-r--r--  1 root root          0 Jun  6 12:15 t2.txt

2、使用-C 参数:

也需要进入对应目录

$ cd /root/test

$ pwd
/root/test

$ ll
-rw-r--r-- 1 root root   0 Jun  6 12:15 t1.txt
-rw-r--r-- 1 root root   0 Jun  6 12:15 t2.txt


$ tar -cvf ttt.tar -C /root/test/ *
t1.txt
t2.txt


$ ll
total 12
-rw-r--r-- 1 root root     0 Jun  6 12:15 t1.txt
-rw-r--r-- 1 root root     0 Jun  6 12:15 t2.txt
-rw-r--r-- 1 root root 10240 Jun  6 12:28 ttt.tar

当然,可以直接把tar包打到指定位置:

$ pwd
/root/test

$ tar -cvf /data/ttt.tar -C /root/test/ *
t1.txt
t2.txt

二、解压tar包到指定位置:

通过上面,我们可以把文件直接打进tar包,不包含目录。当我们解压时,需要建立好对应的目录(和scp比一样,scp会自动建立),然后使用-C 指定解压的位置。(注:前提是tar打的包不包含路径)

$ cd /data
$ mkdir abc

$ pwd
/data

$ tar -C /data/abc/ -xvf ttt.tar 
t1.txt
t2.txt

$ cd abc/
$ ll
total 0
-rw-r--r-- 1 root root 0 Jun  6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun  6 12:15 t2.txt

 

 

 

### 使用 `tar` 命令打包文件夹 要将指定的安装包文件打包成 `.tar.gz` 文件,可以使用 `tar -zcvf` 命令。以下是该命令的具体参数含义: - `-c`: 创建一个新的归档文件- `-v`: 显示处理过程中的详细信息。 - `-f`: 指定生成的目标文件名称。 - `-z`: 表示通过 gzip 进行压缩。 假设目标文件名为 `package.tar.gz`,而待打包文件路径为 `/path/to/folder/`,那么完整的命令如下所示[^1]: ```bash tar -zcvf package.tar.gz /path/to/folder/ ``` 此命令会将 `/path/to/folder/` 中的内容全部打包压缩至当前目录下的 `package.tar.gz` 文件中。如果希望查看具体操作细节,则可以通过终端观察输出日志来确认哪些文件被成功加入到了归档之中。 对于某些特殊类型的软件包而言,比如 TarBall 格式的绿色免安装应用或者自定义脚本封装形式(如 bin/run 类型),它们可能已经包含了预构建完成的应用二进制文件以及必要的配置项等内容][^[^23]。在这种情况下,只需按照上述方法将其所在整个目录结构完整保存下来即可满足分发需求。 ### 示例代码展示 以下是一个实际使用的例子演示如何利用 shell 脚本来实现自动化打包流程: ```bash #!/bin/bash SOURCE_DIR="/example/source/directory" TARGET_FILE="output_package.tar.gz" if [ ! -d "$SOURCE_DIR" ]; then echo "Source directory does not exist!" exit 1 fi echo "Packing $SOURCE_DIR into $TARGET_FILE..." tar -zcvf "$TARGET_FILE" "$SOURCE_DIR" if [ $? -eq 0 ];then echo "Package created successfully." else echo "Failed to create package." fi ``` 以上脚本首先验证源文件夹是否存在,接着调用 `tar` 工具执行打包动作,并最后检查返回状态码以判断任务是否顺利完成。 #### 注意事项 当涉及到跨平台移植或者是同架构之间的部署时,请务必注意兼容性问题;另外还要考虑到权限设置等因素的影响可能会导致最终结果有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值