Android工程搜索效率工具pgrep

如果在Android工程里全局搜索一个字符串, 会搜索到很多无用的文件夹里面, 并且我们本身并不想在所有文件中搜索, 更多的是仅仅在我们用到的文件中搜索, 如何解决呢?

find+grep

find命令可以查找到该目录下的所有的文件, 如果该文件不是我们的目标文件, 就不在里面搜索就是了, 然后通过grep在找到的目标文件中搜索, 得到搜索内容后输出.
那么就带来两个问题
1 . find是基于全局搜索文件的, 并不需要把所有文件都遍历, 因为有些文件夹内的文件全都不是我们想要的, 比如build文件夹或者.externalNativeBuild和libs文件夹
2 . find命令对于定义搜索的文件不是很灵活, 可扩展性不好

python脚本递归查找文件+grep

通过Python脚本递归查找文件, 可以避开特定的文件夹, 也可以定制要搜索的文件, 比如定制文件后缀
源文件,配置文件, 资源文件的后缀通常也就几种, .java, .c, .cpp, .xml, .gradle, .txt, .mk…
需要设定当遇到这几种文件的时候就在这些文件中查找
于是我们需要2个配置, 一个配置指定排除的目录, 一个配置指定查找文件的后缀名

AVOID_DIR = ("build", ".externalNativeBuild", "libs")
CONTAINS_FILE = ("java", "xml", "c", "cpp", "gradle", "txt", "mk")

find_file递归查找文件, 如果目录不在AVOID_DIR中则继续往下查找, 如果递归到文件的时候则调用search_file
find_file:

def find_file (path, content):
    parents = os.listdir(path)
    for parent in parents:
        child = os.path.join(path,parent)
        if os.path.isdir(child):
            if not AVOID_DIR.__contains__(parent):
                find_file(child, content)
            else:
        pass
        else:
            search_file(child, content)
            pass

通过should_grep判断是否属于目标文件, 通过commands.getstatusoutput(reg_grep), 获取reg_grep的返回值, 对返回值格式化后输出

def search_file(file, content):
    # 添加过滤条件, 符合过滤条件的继续往下
    file_divided = file.split(".")
    if len(file_divided) <= 1: #该文件无后缀
        return # gradlew文件就是没有后缀, 不需要查找
    else:
        file_extend = file_divided[len(file_divided) - 1]
        if not should_grep(file_extend):
            return
        else:
            pass

    len_cwd = len(cwd) + 1
    len_file = len(file)
    sub_file = str(file)[len_cwd: len_file]
    reg_grep = "grep " + content + " " + sub_file + " -irn"
    tuple_grep = commands.getstatusoutput(reg_grep)
    output = tuple_grep[1]
    strs = output.split(content)
    if len(strs) <= 1:
        return
    i = 0
    color_content = "\033[1;32;31m%s\033[0m" % content
    for s in strs:
        if i != 0:
            print (color_content, end='')
        print (s, end='')
        i = i + 1
    print (end=u'\n')

should_grep文件:

def should_grep(extend):
    if CONTAINS_FILE.__contains__(extend):
        return True

该文件可以在这里获取, 使用的是Python2.7, 使用的时候需要配置引入commands包

pgrep.py文件的配置和使用

可以在Linux系统的.bashrc或者其他终端配置文件中输入

alias pgrep='python ~/bin/python/pgrep.py'

同时将pgrep.py放到~/bin/python/目录下, 执行

chmod +x ~/bin/python/pgrep.py
cd ~ && source .bashrc

使用方法

在Android工程的根目录下执行

pgrep "privateKey"

这样就可以找到该目录下所有目标文件包含该”privateKey”的行, 同时避开了不必要的目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值