用于查找文件内容的命令
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了