使用Shell批量删除AndroidStudio build目录


声明:本文转载自https://my.oschina.net/flueky/blog/1794702,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

前言

多数Android程序猿都有一个痛,使用AndroidStudio开发安卓项目时,build目录占用太多存储空间。在没有版本控制工具的情况下,一些没有经验的Android开发者会将自己的程序直接打包发送给别人。这样的代码包,少则几十兆,多则数百兆,其中多数都是build目录下的文件。(使用eclipse开发时,bin 目录和gen目录与之类似。

在AS工程中,至少有一个项目级的build目录,每个module 都有一个自己的build目录。也许你们觉得发送代码之前,仔细删除几个build目录,很简便的申请,没必要去为此大费周章的去写什么脚本工具。但是楼主由于工作性质,经常会有同事发送代码过来、和发送代码给同事的情况,以及电脑里存储了公司几十个项目的源码,偶尔改下bug,编译一次。这样才有了写脚本的念头。

下图是删除build前后的对比,节省了24G的存储空间。

输入图片说明

输入图片说明

shell 脚本

遍历目录

遍历文件和文件夹,是一个递归的过程,因此声明一个函数readDir递归调用。使用命令ls 路径 遍历路径下全部文件(夹),使用for循环获取到全部输出,判断是文件夹,先输出文件夹路径再进行递归,判断是文件,直接进行输出。

脚本内容

#!/bin/bash function readDir(){     for element in `ls $1` # 遍历 ls 输出     do         dir_or_file=$1"/"$element # 拼接完整地址         if [ -d $dir_or_file ] # 判断是文件夹         then             echo "$dir_or_file" # 输出文件夹路径             readDir $dir_or_file # 遍历文件夹         else             echo "$dir_or_file" # 输出文件路径         fi     done } readDir $1 

此处有两个变量 $1for循环中的 $1readDir函数接收的第一个参数。readDir $1表示在终端执行脚本文件时,接收的第一个参数。其中$0表示脚本文件的路径。

echo $0 echo $1 echo $2 

上述代码输出:

del-build 参数1 参数2 /Volumes/flueky/shell/del-build 参数1 参数2 

脚本测试

del-build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录 /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/blog.md /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build/test /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build/test1 /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/pic /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/pic/52BAADAA2A0974465F2A4873DC306D9B.jpg /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/pic/B18656263D5D14EE02C0B47A7C707BEF.jpg /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/build/heheda /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/heheda 

del-build 为脚本文件名,由于楼主直接将脚本所在的shell目录添加到环境变量中,因此可以直接在shell目录外执行此脚本文件。

新建脚本文件后,需要使用命令 chmod a+x 文件名 添加文件的执行权限。

删除build目录

弄清楚遍历的脚本后,可以在此基础上删除指定文件(夹)。由于build是文件夹,因此只需要在if [ -d $dir_or_file ]中,添加删除操作。

脚本内容

dir_or_file=$1"/"$element if [ -d $dir_or_file ] then     if [ $element = "build" ] # 判断文件夹名是build     then         echo "$dir_or_file" # 输出文件夹路径         rm -rfv $dir_or_file # 删除文件夹     else         readDir $dir_or_file # 遍历文件夹     fi fi 

$element 是 ls命令输出的文件名,需要和$1拼接形成完整的路径。在dir_or_file是文件夹的前提下,判断文件名是否是build,再进行删除和遍历操作。

脚本测试

del-build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录 /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build/test /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build/test1 /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/build /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/build/heheda /Volumes/flueky/GitHub/flueky/blog/shell删除build目录/test/build 

总结

完整脚本内容如下:

#!/bin/bash function readDir(){     for element in `ls $1`     do         dir_or_file=$1"/"$element         if [ -d $dir_or_file ]         then             if [ $element = "build" ]             then                 echo "$dir_or_file"                 rm -rfv $dir_or_file             else                 readDir $dir_or_file             fi         fi     done } readDir $1 

至此一个简单的批操作脚本已经完成。可以将"build" 替换成$2,在执行 del-build 脚本时,动态指定需要删除的文件夹。

本文发表于2018年04月12日 22:38
(c)注:本文转载自https://my.oschina.net/flueky/blog/1794702,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1936 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1