find ? find !

用于查找文件内容的命令

 

find -iname '*.java' -exec egrep -i 'billUser' --color=always -H -n -m 1 {} /;

查找当前目录及其子目录中,所有java文件中,使用了beanUser字符串的java文件,只要文件有一行

使用了beanUser 就显示这行及其行号,可以方便找代码,我这里是在找 beanUser这个变量,您可以用来找注释,如果用 eclipse,ctrl+h也就都搞定了哈

 

有 一个问题就是 -exec 会不会引起 出现“参数太多”之类的错误,比如:http://hi.baidu.com/qihuiwan/blog/item /056800f390993958352accf4.html 中提到的,这样的情况用 xargs 来避免,但我实验后,发现不是那么回事。

 

我的find 是GNU find version 4.2.31,发现 -exec 不会引起 参数太多的错误,代码如下,由于 c 水平太烂,就用 java 了

 

 

~/test$ find . -iname '*test*' -exec java jj {} /;

实验结果如下:

invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./svntest]
----------------------------------------
invoke counter: 0   我的 count 是类变量,所以这里说明是第二次启动 java 命令,
current directory: /home/jactive/test/.
args.length: 1
args is [./test]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./test/Test.java]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./hibernate/trunk/cache-jbosscache/src/test]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./hibernate/trunk/cache-jbosscache/src/test/java/org/hibernate/cache/.svn/text-base/OptimisticTreeCacheTest.java.svn-base]
----------------------------------------

(略)

 

 

 

~/test$ find . -iname '*test*' -execdir java jj {} /;
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./test]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/test/.
args.length: 1
args is [./Test.java]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/hibernate/trunk/cache-jbosscache/src/.
args.length: 1
args is [./test]
----------------------------------------

(略)

 

 

 

这样看来 -exec 和 -execdir 都不会出现参数过长导致 shell 错误的问题

 

-exec + 和 -execdir + 也不会 好像find 做过处理了,能够保证参数不会过长

 

invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1042
args is [./svntest, ./test, ./test/Test.java, ./hibernate/trunk/cache-jbosscache/src/test, ./(略) 好长好长 126088

----------------------------------------

invoke counter: 0
current directory: /home/jactive/test/.
args.length: 846  
args is [./hibernate/trunk/testsuite/src/test/java/org/hibernate/test/idclass/.svn/prop-base/IdClassTest.java.s(略) 96910

----------------------------------------

(这里没有省略任何东西,一共就调用了 java jj 两次)

 

 

 

 

~/test$ find -iname '*test*' -execdir java jj {} +
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./svntest]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/.
args.length: 1
args is [./test]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/test/.
args.length: 1
args is [./Test.java]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/hibernate/trunk/cache-jbosscache/src/.
args.length: 1
args is [./test]
----------------------------------------
invoke counter: 0
current directory: /home/jactive/test/hibernate/trunk/cache-jbosscache/src/test/java/org/hibernate/cache/.svn/text-base/.
args.length: 2
args is [./OptimisticTreeCacheTest.java.svn-base, ./PessimisticTreeCacheTest.java.svn-base]
----------------------------------------

(略,还有好多,按照目录进行分类的,同意目录的文件,作为参数传入)

 

 

 


算啦,就这么不求甚解吧,等有功夫再收拾c,看看 find 的代码就ko了

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值