看到Windows上的自解压程序双击后就自动将数据文件提取出来,很是便捷,那么如何在Linux创建自解压文件呢?方法自然是有很多的,有一天,小明又滚出去了,这回他没有想着怎样再回到教室,他很好奇,于是他搜索了一下关于如何在Linux下创建自解压文件的问题,他发现所有结果貌似都非常统一,用了tail的特性,而且用的是tail以行的方式输出。额,天下文章……,他表示深以为然。他跟我说了此事,我回他:“小明,GCQ!”
在本文中,笔者准备了2种方法创建自解压文件,其一,也是利用tail的特性,但是不使用行,而使用字节输出。其二,用C语言将zip粉饰一下门面。
在本文中,笔者准备了2种方法创建自解压文件,其一,也是利用tail的特性,但是不使用行,而使用字节输出。其二,用C语言将zip粉饰一下门面。
tail命令有一个参数:c,可以输出最后给定数量的字节,如果应用于创建自解压文件,相比较通过行输出,笔者的强迫症使笔者觉得这样比较顺眼一些。wc命令也有一个参数:c,可以计算文件的字节数,配合awk加工一下输出便可提取出字节大小。大致思路是这样:通过创建一个含有有解压命令的shell脚本,与一个压缩包合并为一个文件,脚本中实现从自身指定位置中提取压缩包并解压。于是有了以下用于创建这个怪物的shell脚本:
#!/bin/bash
#
#make a self-decompress file
#version: 0.1
#
#Create by Daisuchuan on Ubuntu Linux. Mar.26,2015
if [ $# != 1 ];then #判断参数数量
echo "$0:Only support one argument." #只支持1个参数
echo "USAGE: $0 file" #打印帮助信息
exit 1 #异常退出
fi
tar -czf .data.tar.gz $1 #压缩文件,不加v选项
DATA_SIZE=`wc -c .data.tar.gz|awk '{print $1}'` #取压缩文件大小
echo "#!/bin/bash">$1.run #开始制作shell文件头
echo "tail -c $DATA_SIZE \$0 >>.data.tar.gz">>$1.run #将最后的数据字节输出
echo "tar -xvzf .data.tar.gz">>$1.run #解压数据,加v选项
echo "rm .data.tar.gz">>$1.run #删除临时文件
echo "echo 'has been decompressed.'">>$1.run #打印提示
echo "exit 0">