shell制作自解压文件tar

Posted xuxingzhuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell制作自解压文件tar相关的知识,希望对你有一定的参考价值。

1. 将压缩内容添加到bash脚本

如何将压缩内容添加到脚本,可以做到运行脚本时自解压

今天遇到一个bash脚本比较大,大概有60MB,vim打开之后,发现脚本的开头是shell脚本内容,后面全是乱码,比较好奇,然后就分析脚本做了哪些动作,还可以正常执行,下面是脚本的截图
https://tva1.sinaimg.cn/large/0081Kckwgy1gldflynhr2j31xy0omdqw.jpg
我们看脚本中, 第29行看到__ARCHIVE_BELOW__下面全是乱码,根据名字我们也可以分析是一个打包的压缩文件(这是一个标示,不是必须的,可以自定义,只要能脚本开头awk指令能定位解析到就可以)

第9行看到是使用aws进行获取压缩打包内容的开始行,这一行主要是获取压缩打包内容的行号 第11行是使用tail获取压缩包打包内容行,然后通过管道将这部分内容tar指令进行解压缩到临时/tmp目录 第21行执行其他脚本内容(这里不进行概述) 下面我们也模拟这个场景,做一个测试,看下实现效果是怎么样的

2. 编写代码测试

本次环境使用的是CentOS7环境,我们在/tmp下创建一个test目录,里面编写脚本以及添加一个打包目录,然后打包压缩添加到脚本中,执行脚本可以自动解压文件到相关目录

2.1. 创建shell脚本

内容如下:

#!/bin/bash
#

TMPDIR=$(mktemp -d)

ARCHIVE=$(awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "0")
tail -n+$ARCHIVE "$0" | tar -zxvm -C $TMPDIR > /dev/null 2>&1 3>&1

if [ $? -eq 0 ]; then
    echo "Archive success."
else
    echo "Aarchive failed."
fi

exit 0
__ARCHIVE_BELOW__

2.2. 生成测试文件

创建一个/tmp/test/archive目录,里面创建两个目录,并在两个目录下分别生成两个测试文件

venv) [root@carltonxu-dev /tmp/test][13:59:58]# pwd
/tmp/test
(venv) [root@carltonxu-dev /tmp/test][13:59:59]# mkdir archive
(venv) [root@carltonxu-dev /tmp/test][14:00:05]# cd archive/
(venv) [root@carltonxu-dev /tmp/test][14:00:43]# echo "This a 01 file" > archive/file01
(venv) [root@carltonxu-dev /tmp/test][14:01:10]# echo "This a 02 file" > archive/file02
(venv) [root@carltonxu-dev /tmp/test][14:21:35]# tree
.
|-- archive
|   |-- file01
|   `-- file02
`-- selfExtracting.sh
1 directory, 3 files

2.3. 目录打包压缩添加至脚本

将archive目录进行打包压缩并添加到脚本中,并删除archive目录

(venv) [root@carltonxu-dev /tmp/test][14:01:51]# tar -zcvm archive >> selfExtracting.sh
(venv) [root@carltonxu-dev /tmp/test][14:05:24]# rm -rf archive/
selfExtracting.sh file

https://tva1.sinaimg.cn/large/0081Kckwgy1gldfsl6jfaj31ym0cl41y.jpg

2.4. 执行脚本

查看执行脚本结果输出成功,/tmp目录生成一个临时的目录,将所有压缩包都放在了这个目录下面,内容都是正常的

(venv) [root@carltonxu-dev /tmp/test][14:29:57]# bash selfExtracting.sh
Archive success.

(venv) [root@carltonxu-dev /tmp/test][14:30:23]# tree /tmp/tmp.1VmYpEoIbI/
/tmp/tmp.1VmYpEoIbI/
`-- archive
    |-- file01
    `-- file02

1 directory, 2 files
(venv) [root@carltonxu-dev /tmp/test][14:30:27]# cat /tmp/tmp.1VmYpEoIbI/archive/file01
This a 01 file
(venv) [root@carltonxu-dev /tmp/test][14:30:37]# cat /tmp/tmp.1VmYpEoIbI/archive/file02
This a 02 file

3. 总结

shell自解压脚本在很多情况下都可以使用,我们可以将自己定义的脚本已经目录文件放在一个里面,远程执行脚本(curl | bash)这样我们就可以执行通过指令直接获取资料,我们生成的脚本,在>>导入大包压缩内容之后,是不能够进行修改的,只要修改之后,此文件就会出现解压失败的情况,这样也可以防止别人篡改我们的文件内容

以上是关于shell制作自解压文件tar的主要内容,如果未能解决你的问题,请参考以下文章

shell制作自解压文件tar

linux下的单文件安装程序——shell+tar实现自解压脚本

Linux使用shell解压tar.Z格式文件

shell批量解压方法

时如何去除目录结构及其解压到指定目录 (

如何解压 shell 脚本中的 tgz 文件?