文件查找——搜索当前目录下的文件

知道大概的文件名称,使用

findf FileName

findf.py

import argparse, re, os
from os.path import join parser = argparse.ArgumentParser()
parser.add_argument('FILENAME', help='file name use regular expression')
parser.add_argument('-e', metavar='EXCLUDE', default=None, help='exclude file name use regular expression') args = parser.parse_args() count = 0
for root, dirs, files in os.walk(os.getcwd()):
for name in files:
if not re.search(args.FILENAME, name):
continue
if args.e and re.search(args.e, name):
continue
count += 1
print(join(root, name))
if count <= 1:
print('\t %d file found.' % (count))
else:
print('\t %d files found.' % (count))

对应在 windows 下可以使用这样的命令:

dir /b /s FileName

在 linux 下可以使用这样的命令:

find . -name FileName -print

字符串查找——在当前目录及子目录中搜索文件包含的字符串

比如,看看哪些 java 文件中包含了 "Hello" 字符串

finds .java Hello

finds.py

import os, re, argparse
from os.path import join parser = argparse.ArgumentParser()
parser.add_argument('-c', metavar='CODING', default='utf-8', help='coding: gbk, utf-8')
parser.add_argument('EXT', help='.java, .txt')
parser.add_argument('REGEX', help='regular expression') args = parser.parse_args() for root, dirs, files in os.walk(os.getcwd()):
for name in files:
if name[-len(args.EXT):] != args.EXT:
continue
count = 0
inFile = False
for line in open(join(root, name), encoding=args.c).readlines():
count += 1
if re.search(args.REGEX, line):
print(count, '\t', line, end='')
inFile = True
if inFile:
print(join(root,name))

对应在 windows 下的命令:

findstr /s /c:"Hello" *.java

在 linux 下:

find . -name '*.java' -exec grep 'Hello' \{} \; -print

jar 包查找——查找一个类所在的 jar 包

有时候,需要使用一个类,但不知道它在哪个 jar 包中。

findj ClassName

findj.py

import os, re, sys
from os.path import join
from zipfile import ZipFile def find_in_all_jars(matchstr, path):
for root, dirs, files in os.walk(path):
for name in files:
if name[-4:] == '.jar' and handle_jar(matchstr, join(root, name)):
print(join(root, name)) def handle_jar(matchstr, filename):
isMatch = False
with ZipFile(filename) as zipfile:
for name in zipfile.namelist():
if re.search(matchstr, name):
print('\t', name)
isMatch = True
return isMatch if len(sys.argv) != 2:
print('''Usage: findj ClassName.class''')
sys.exit() #find_in_all_jars(sys.argv[1], os.getcwd()) # 在当前目录及子目录中所有 jar 包中查
find_in_all_jars(sys.argv[1], 'e:\\data\\repository')

对应的 windows 命令:

for /r %i in (*.jar) do @jar tf %i | find "FastDateFormat" && echo %i
for /r %i in (*.jar) do @jar tf %i | find "FastDateFormat" & echo %i

Linux 命令

find . -name '*.jar' -exec jar tvf \{} \| grep Hello \; -print

字数统计——统计当前目录下的代码

统计当前目录下对应文件的字数,单词数,行数

pwc .java

pwc.py

import os, re, argparse
from os.path import join parser = argparse.ArgumentParser()
parser.add_argument('-c', metavar='CODING', default='utf-8', help='coding: gbk, utf-8')
parser.add_argument('-d', action='store_true', default=False, help='print detail')
parser.add_argument('EXT', help='.java, .txt') args = parser.parse_args() nf = nl = nw = nc = 0 for root, dirs, files in os.walk(os.getcwd()):
for name in files:
if name[-len(args.EXT):] != args.EXT:
continue
nf += 1
nnl = nnc = nnw = 0
try:
for line in open(join(root, name), encoding=args.c).readlines():
nnl += 1
nnc += len(line)
nnw += len(line.split())
except:
print('Passing file error: ' + join(root, name))
nl += nnl
nc += nnc
nw += nnw
if args.d:
print("%12d%10d%8d %s" % (nnc, nnw, nnl, join(root, name))) print("%12d%10d%8d%10d Files" % (nc, nw, nl, nf))

自己动手写文件查找,字符串查找,查询jar包等工具的更多相关文章

  1. Linux查找class类所在jar包

    1.说明 写代码或者定位问题的时候, 经常发生只知道类名不知道其所在jar包的问题, 在Eclipse中可以使用Ctrl+Shift+T查找类, 但是如果类所在的jar包不在Build Path中, ...

  2. 文件上传速度查询方法(watch工具)

    由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下:[root@mail01 ~]# du -sh /mnt5.6G /mnt[root@mail0 ...

  3. java程序打包成jar文件,使用到第三方jar包

    1.右击工程选择Export—>选择JAR file—>选择NEXT,如下图所示 2.选择需要打包的工程,并且选择存放目录,我这放在 E:\jartest 目录下,然后点击NEXT,如下图 ...

  4. 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包

    现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...

  5. SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题

    看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...

  6. JDK8- interface接口可以写方法体了-- 惊 dt.jar包等

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. == 一个类实现某个接口,必须重写接口中 ...

  7. maven 项目pom文件引入lib下的jar包

    <dependency> <groupId>abc</groupId> <artifactId>abc</artifactId> <v ...

  8. 自动配置pom文件,构建maven项目jar包依赖关系,找到jar包运用到jmeter

    首先说下pom文件特别方便的优点: 什么是pom文件? POM(Project Object Model) 是Maven的基础. 它是一个XML文件,包含了Maven用来build项目所需要的项目配置 ...

  9. 怎么修改jar包中的class文件然后再重新打成jar包

    1.导入到eclipse中, 修改完了 然后导出jar即可 2.jar cf file.jar *.class 将当前目录下所有CLASS文件打包成新的JAR文件 3.对于补丁.之前已经有jar 例如 ...

随机推荐

  1. eclipse控制台乱码

  2. PowerDesigner导出SQL脚本

    1. 先创建E-R图模型

  3. angular之上滑换页指令

    healthmallDirectives.directive("goodsTopRefresh", ['$window',function ($window) { return { ...

  4. react native 多选按钮

    在做项目的时候有一个需求,是可以选择多个条件的,特地在Github上找了一些案例,发现没有什么合适的,于是自己根据这些案例,改装一下,封装了一个合适自己的.先看我封装的代码. import React ...

  5. 我的Python学习之路 Python的输入输出与基本数据类型

    *** python中的变量不需要事先声明再使用,而可以直接来一个变量名,后面一个赋值,接着一个数据值,如 hw = "hello python",相当于Python能智能的根据你 ...

  6. shell中${ } 的一些特异功能

    假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不同的值: ${file#*/}:拿掉第一条 / 及其左边的字符串:di ...

  7. 通过LDAP管理VSFTP帐户

    yum install -y openldap openldap-servers openldap-clients pam_ldap nss-pam-ldapd vsftpd slappasswd # ...

  8. Java数据结构——栈的应用(以数制转换为例子)

    看一万遍,不如自己动手实践,请不要直接copy代码,先自己去理解例子实现的原理,然后试着自己动手去实践. 用Java去实现栈操作,会用到stack这个类,这类中有几个方法需要知道他们的用法  bool ...

  9. Nodejs windows的安装

    0.下载地址: http://nodejs-org.qiniudn.com/ https://nodejs.org/download/ https://nodejs.org/en/ 1.基本就是一路N ...

  10. 导入数据经常使用的SQL语句整理整理

    1.事务(基本) GO BEGIN TRY BEGIN TRAN -- 导入数据 COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH GO ...