文档章节

使用Shell批量删除AndroidStudio build目录

flueky
 flueky
发布于 2018/04/12 17:35
字数 1129
阅读 545
收藏 4

前言

多数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 脚本时,动态指定需要删除的文件夹。

© 著作权归作者所有

flueky
粉丝 0
博文 5
码字总数 8029
作品 0
合肥
高级程序员
私信 提问
加载中

评论(7)

purplechen
purplechen
git clean -fdx
or
repo forall -c 'git clean -fdx'

flueky
flueky 博主

引用来自“沧海_Sea”的评论

find Code/ -name build | xargs -i rm -rf {}
看不懂😅
flueky
flueky 博主

引用来自“pseudo”的评论

gradle clean
电脑里 几十个项目,就不会挨个clean了
量子
git archive就可以了.
沧海_Sea
沧海_Sea
find Code/ -name build | xargs -i rm -rf {}
linwoain
linwoain
File - Export to Zip File
pseudo
pseudo
gradle clean
Android批量打包-如何一秒内打完几百个apk渠道包

在国内Android常用渠道可能多达几十个,如: 谷歌市场、腾讯应用宝、百度手机助手、91手机商城、360应用平台、豌豆荚、安卓市场、小米、魅族商店、oppo手机、联想乐商、中兴汇天地、华为、安...

SuShine
2017/10/23
61
0
Android 尝试解决 Gradle 升级时 offline mode 类型问题

小菜每次升级 AndroidStudio 和 Gradle 都倍感头疼,没有梯子真的好痛苦,这次小菜从 2.3.3 升级到 3.1.4 版本,被 Gradle 的 offline modle 问题困扰了很久,现在整理一下小菜的处理方式。 ...

阿策神奇
2018/08/14
0
0
AS 升级之Gradle's dependency cache may be corrupt问题解决办法

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/60589629 问题: 今天,发现自己的AndroidStudio可以升...

紫雾凌寒
2017/03/06
0
0
AndroidStudio 关于SVN的相关配置简介

AndroidStudio 的SVN 安装和使用方法与我以前用的其他IDE 都有很大差别,感觉特麻烦,网上相关资料很少,貌似现在 Git 比较流行,之前有用过 github 但是他只能是开源项目免费,下面总结最近...

Erichkko
2015/11/21
102
0
关于切换Windows用户导致Android Studio无法识别Android SDK 的解决方法

关于切换Windows用户导致Android Studio无法识别Android SDK的解决方法。 如果你的计算机是多用户的,你肯定会遇到过这个问题,例如账号A和账号B ,当你在A账户下使用Android Studio可以开发,...

Helloall
2015/02/13
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
23分钟前
5
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
25分钟前
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
52分钟前
4
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
7
0
前端技术之:webpack热模块替换(HMR)

第一步:安装HMR中间件: npm install --save-dev webpack-hot-middleware 第二步:webpack配置中引入webpack对象 const webpack = require('webpack’); 第三步:增加devServer配置项: ho......

popgis
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部