自己动手写文件查找,字符串查找,查询jar包等工具
文件查找——搜索当前目录下的文件
知道大概的文件名称,使用
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包等工具的更多相关文章
- Linux查找class类所在jar包
1.说明 写代码或者定位问题的时候, 经常发生只知道类名不知道其所在jar包的问题, 在Eclipse中可以使用Ctrl+Shift+T查找类, 但是如果类所在的jar包不在Build Path中, ...
- 文件上传速度查询方法(watch工具)
由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下:[root@mail01 ~]# du -sh /mnt5.6G /mnt[root@mail0 ...
- java程序打包成jar文件,使用到第三方jar包
1.右击工程选择Export—>选择JAR file—>选择NEXT,如下图所示 2.选择需要打包的工程,并且选择存放目录,我这放在 E:\jartest 目录下,然后点击NEXT,如下图 ...
- 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包
现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...
- SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...
- JDK8- interface接口可以写方法体了-- 惊 dt.jar包等
基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. == 一个类实现某个接口,必须重写接口中 ...
- maven 项目pom文件引入lib下的jar包
<dependency> <groupId>abc</groupId> <artifactId>abc</artifactId> <v ...
- 自动配置pom文件,构建maven项目jar包依赖关系,找到jar包运用到jmeter
首先说下pom文件特别方便的优点: 什么是pom文件? POM(Project Object Model) 是Maven的基础. 它是一个XML文件,包含了Maven用来build项目所需要的项目配置 ...
- 怎么修改jar包中的class文件然后再重新打成jar包
1.导入到eclipse中, 修改完了 然后导出jar即可 2.jar cf file.jar *.class 将当前目录下所有CLASS文件打包成新的JAR文件 3.对于补丁.之前已经有jar 例如 ...
随机推荐
- 我的 vim 基本配置
" required 使用 vundle 需要先设置这两项 set nocompatible filetype off " 设置 vundle 插件 使用帮助:https://gi ...
- D3中动画(transition函数)的使用
关于transition的几个基本点: 1. transition()是针对与每个DOM element的,每个DOM element的transition并不会影响其他DOM element的tra ...
- idapython实现动态函数调用批量注释
部门小伙伴遇到一个样本需要对动态函数调用就行批量注释还原的问题,通过idapython可以大大的减少工作量,其实这一问题也是很多样本分析中最耗时间的一块,下面来看看如何解决这个问题(好吧这才是今年最后 ...
- 利用DNS Zone Transfers漏洞工具dnswalk
利用DNS Zone Transfers漏洞工具dnswalk DNS Zone Transfers(DNS区域传输)是指一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库.当主服 ...
- C#区分多态和重载-delphi也类似
Delphi也是基于继承和接口的多态性.
- java基础-泛型3
浏览以下内容前,请点击并阅读 声明 8 类型擦除 为实现泛型,java编译器进行如下操作进行类型擦除: 如果类型参数有限制则替换为限制的类型,如果没有则替换为Object类,变成普通的类,接口和方法. ...
- 洛谷 P1827 美国血统 American Heritage Label:字符串Water
题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形 ...
- 阮一峰对js的见解(10大缺陷)
一.为什么Javascript有设计缺陷?这里有三个客观原因,导致Javascript的设计不够完善.1. 设计阶段过于仓促Javascript的设计,其实只用了十天.而且,设计师是为了向公司交差,本 ...
- 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记.
说明 为何要写这篇文章 ,之前看过阿二的梦想船的<Poco::TCPServer框架解析> http://www.cppblog.com/richbirdandy/archive/2010 ...
- 关于C#调用非托管动态库方式的性能疑问
最近的项目中,因为一些原因,需要C#调用非托管(这里为C++)的动态库.网上喜闻乐见的方式是采用静态(DllImport)方式进行调用.偶然在园子里看到可以用动态(LoadLibrary,GetPro ...