Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288060
  • 博文数量: 57
  • 博客积分: 1764
  • 博客等级: 上尉
  • 技术积分: 660
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-09 18:14
文章分类

全部博文(57)

文章存档

2012年(24)

2011年(33)

分类: LINUX

2011-11-10 23:48:48

       vim有个非常有用的插件lookupfile。有了该插件,可以非常快捷,方便地定位到项目中的任何一个文件。该插件,可以通过tags文件来实现找到,但这样效率不高。在lookupfile的帮助中,提到了一种产生高效索引文件的方法:

(echo "!_TAG_FILE_SORTED        2       /2=foldcase/";

(find . \( -name .svn -o -wholename ./classes \) -prune -o -not -iregex '.*\.\(jar\|gif\|jpg\|class\|exe\|dll\|pdd\|sw[op]\|xls\|doc\|pdf\|zip\|tar\|ico\|ear\|war\|dat\).*' -type f -printf "%f\t%p\t1\n" | sort -f))

> ./filenametags

        从上可以看出,该脚本主要是利用了find命令。乍看之下,非常复杂。对待复杂的东西,就好采用分治的方法。

首先要对find命令的结构要有个了解。


find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

可以看出,find由3类参数组成。

、5个“real options”-H -L -P -D -O这5个参数有点特殊,必须在path前,因此跟后面表达式中的options有区别。

1)-H -L -P:这3个用于说明,怎么处理path中的symbolic links-P默认选项,从不symbolic links-Lfollow symbolic links-H,只跟命令行中的symbolic links

2)-D:调试选项,find -D help来查看具体的调试选项

3)-O:优化级别[0-3],默认为1。通过reorder表达式,加快执行速度。

二、path(路径或文件名):描述搜索的位置,可以有多个。如何与表达式区分开来呢?如果-”,”(”,”!”开始,就进入到表达式部分了。

三、expression表达式:描述搜索的样式。find最复杂的部分就是表达式,前面举的例子:除了find .之外,剩下全是表达式。根据这例子,详细来介绍下表达式。

表达式基本组成元素+1

3代表:3类基本元素--普通选项,动作,测试。

1代表:操作符,将3类基本元素组合复杂的表达式。


根据前面举的例子,说说常用的表达式,具体的可看文章后面的附录或者查看find的手册。

选项:除了-daystart, -follow and -regextype,其它选项会影响所有的测试(即使测试先出现,因为选项parse command line会同时被parse,返回都是真。例子中没有,常用的有:

-depth -maxdepth-mindepth:指定搜索目录的深度

-regextype:指定RG流派--emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended

动作用到的有

-prune如果是目录,返回true,但不搜寻该目录;如果指定了-depth,返回false,并不起作用

-printf format:返回true,按指定格式输出到标准输出上

-print返回true,输出文件名到到标准输出,并跟着输出一个换行符(newline

-print0同上,但是跟着输出的是终止符(null character)

测试

-type c文件类型--f regular file / d directory / p name pipe / s socket

-ipath/-iwholename/-path/-wholename根据样式匹配文件名。注意,样式不符合RG,更像通配符的方式,后面两个是大小写敏感,前两个不敏感。

-name/-iname匹配base of file name,即不包括前面的路径,其它的同上一条。

-regex/-iregex采用RG文法,匹配文件名

-atime n/-ctime n在过去N天内,创建或访问的文件

-anewer file/-cnewer file/-newer filefile更新的文件


附录:find表达式的基本组成部分

操作符 (优先级递减;未做任何指定时默认使用 -and):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

普通选项 (总是真,for clarity最好在其它表达式前指定):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xdev -ignore_readdir_race -noignore_readdir_race

动作:

      -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

测试(N可以是 +N -N N):-amin N -anewer FILE -atime N -cmin  
      -cnewer
文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称
      -ilname
匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
      -links N -lname
匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件
      -nouser -nogroup -path
匹配模式 -perm [+-]访问模式 -regex 匹配模式
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]


阅读(1415) | 评论(0) | 转发(0) |
0

上一篇:MD设备分析(一)

下一篇:/etc/fstab和mount

给主人留下些什么吧!~~