制作 shell 脚本压缩 Android 8.0代码
来源:互联网 发布:周思成网络课程百度云 编辑:程序博客网 时间:2024/06/09 16:13
制作 shell 脚本压缩 Android 8.0代码
★ 初衷
下载了Android 8.0.0r17的代码,想把代码压缩保存,并上传到百度网盘分享。
按照之前的做法,把整个目录压缩,生成一个.tar.gz文件,文件大小大概12~13GB。
这次想分目录压缩,即把android 8.0.0r17代码按照目录结构来压缩,只将一级目录压缩。
所有一级目录,一共25个,如下:
artbionicbootablebuildctsdalvikdevelopersdevelopmentdevicedocsexternalframeworkshardwarekernellibcorelibnativehelperpackagespdkplatform_testingprebuiltssdksystemtesttoolchaintools
在Linux中,右键每个目录,然后“压缩”,也可以将每个目录都压缩保存。
为了方便每次保存 Android 代码,还是决定弄个shell脚本,顺便练习学到的 vim 命令以及正则表达式。
注:操作环境:Linux。
★ 目标
对于给定的目录,例如framework目录,将其压缩为framework.tar.gz。执行的命令为:
tar -zcvf ../android_8.0.0_r17/frameworks.tar.gz frameworks --exclude=.git
注:当前目录android8.0src为Android 8.0.0r17代码的目录。android_8.0.0_r17目录是与当前目录同一级的,是存放.tar.gz文件的目录。大致的目录结构是这样的:
home| \ android8.0src (用于存放 Android 8.0 代码)| || \ framework (与 framework 目录同级的其他目录,这里没列出来) \ android_8.0.0_r17 (与 android8.0src 目录同级,用于存放 .tar.gz 文件)
android8.0src 目录下一共25个子目录,目标是分别压缩这25个目录,生成对应的 .tar.gz 文件。
即,生成25行 tar -zcvf ../android_8.0.0_r17/frameworks.tar.gz frameworks --exclude=.git
。
注:--exclude=.git
,是因为下载的android代码中有.git
目录,而.git
目录并不要打包压缩,所以这里将.git
目录排除了。
注意:当前目录一直是:android8.0src
。
★ 获取目录名
执行ls -l
可以列出所有文件和目录,我们只需要目录名。
有两种获取目录名的方式:
方式一:列选择,然后拷贝粘贴
在Linux中,按住Ctrl,然后鼠标可以选择列(在终端中)。(BTW:在cygwin中,按住alt,可以列选择)
vim zip.sh
创建一个空文件zip.sh,然后,将拷贝的目录名粘贴到zip.sh中。方式二:利用awk
ls -l | grep "^d" | awk -F' ' '{print $9}' > zip.sh
其中,grep "^d"
是找到目录,匹配的是ls -l
输出的目录权限drwxrwxr-x
。目录的每一行以d开头。
选择上面的两种方式的任意一种,执行之后,zip.sh中的内容如下:(所有一级目录已经在文章开始给出了,所以之后为了节省篇幅,只列出几个目录名)
artdeviceframeworkshardwarekernel(其他目录 略)
再次强调:为了节省篇幅,只列出了5个目录,其他目录省略了。
★ 将每一行改成art.tar.gz art --exclude=.git
这个形式(以art目录为例)
用vim打开zip.sh:vim zip.sh
执行shift + 冒号
,然后输入%s/\(.*\)$/\1\.tar\.gz\ \1 --exclude=\.git/gc
,显示如下:
:%s/\(.*\)$/\1\.tar\.gz\ \1 --exclude=\.git/gc
例如,将art
替换为art.tar.gz art --exclude=.git
。
如果你的zip.sh中的目录名后面有斜杠/
,可以使用下面的命令:
:%s/\(.*\)\/$/\1\.tar\.gz\ \1 --exclude=\.git/gc
例如,将art/
替换为art.tar.gz art --exclude=.git
对%s/\(.*\)$/\1\.tar\.gz\ \1 --exclude=\.git/gc
的解释:
%s/str1/str2/gc
%s
是替换,对应单词substitute。用str2替换掉str1。
后面的gc,g表示全局替换,即global。c表示用户确认,即confirm。
\(.*\)$
这个字符串对应上面说的str1,是一个正则表达式。.*
表示任意字符,$
表示一行的结尾。\( \)
是为了后面引用,即后面的\1
就是\( \)
中的内容。 \1\.tar\.gz\ \1 --exclude=\.git
\1
是引用前面加括号的内容。然后加上.tar.gz
,然后加上空格,\1
再引用一次。然后再加上--exclude=.git
。 \.
, \(
, \)
, \/
分别对.
, (
,)
,/
进行转义。以第一行中的art
为例,\( \)
中的内容就是art
,所以后面的\1
的内容就是art
。
然后art
就被替换为art.tar.gz art --exclude=.git
。
现在,zip.sh中的内容,如下:
art.tar.gz art --exclude=.gitdevice.tar.gz device --exclude=.gitframeworks.tar.gz frameworks --exclude=.githardware.tar.gz hardware --exclude=.gitkernel.tar.gz kernel --exclude=.git(略)
★ 在每一行前面加上tar -zcvf ../android_8.0.0_r17/
还是在vim中。执行以下步骤(这些步骤就是批量操作多行的固定用法):
(1)将光标放到第一行的开头
(2)Ctrl + V (注:V表示V键,不是shift + v)
(3)J键(向下)或者下方向键,直到最后一行。
(4)shift + i,进入编辑模式,这时光标回到了第一行。
(5)拷贝粘贴tar -zcvf ../android_8.0.0_r17/
到光标所在行(第一行)。
(6)Esc键,这时所有行都是以tar -zcvf ../android_8.0.0_r17/
开头了。
现在,zip.sh中的内容,如下:
tar -zcvf ../android_8.0.0_r17/art.tar.gz art --exclude=.gittar -zcvf ../android_8.0.0_r17/device.tar.gz device --exclude=.gittar -zcvf ../android_8.0.0_r17/frameworks.tar.gz frameworks --exclude=.gittar -zcvf ../android_8.0.0_r17/hardware.tar.gz hardware --exclude=.gittar -zcvf ../android_8.0.0_r17/kernel.tar.gz kernel --exclude=.git(略)
到此,已经达成目标了。
如果使用Notepad++,也可以在每一行开头批量添加tar -zcvf ../android_8.0.0_r17
,操作是:光标放到第一行开头,按住alt键(列选择),鼠标选择每一行的开头(即每一行第一个字符前面,不选中任何字符),然后拷贝粘贴tar -zcvf ../android_8.0.0_r17
,跟上面的效果一样。
★ 结语
VIM 有很强的对文本的处理能力,本文中只是冰山一角。
掌握正则表达式,可以事半功倍。
- 制作 shell 脚本压缩 Android 8.0代码
- 制作android SD启动卡shell脚本
- 日志压缩shell脚本
- 批量压缩shell脚本
- 工作备忘-制作Framework所用shell脚本代码
- shell脚本的制作
- Android系统代码本地更新Linux shell脚本2
- Android系统代码本地更新linux shell脚本1
- js脚本压缩解压缩代码
- shell脚本之按天压缩gzip
- Shell脚本使用TinyPng批量压缩图片
- shell脚本压缩js和css
- Android 执行shell脚本
- android执行shell脚本
- Android执行shell脚本
- Android shell 脚本执行
- Android执行shell脚本
- Android执行shell脚本
- 字面值(常量)到底是什么数据类型
- 后缀表达式
- Scrapy
- 2017-10-25 2周3次课
- C语言实现四则运算(小型计算器)
- 制作 shell 脚本压缩 Android 8.0代码
- java模式—装饰者模式
- LeetCode基础-排序-合并排序
- Velocity 在Spring中的配置
- Java技术——你真的了解String类的intern()方法吗
- Oracle 数据库 Record is locked by another user 问题解决办法
- Spring mvc HandlerMapping 实现机制
- CSS进阶
- BZOJ2460 线性基裸题