jony413

多媒体信息发布、排队叫号、医院分诊、电子班牌

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如下三种方法都可以:

1.

  1. find . -name "abc*" ! -name "*.*" -print

2.

  1. find . -regex '.*/abc[^.]*'

3.

  1. find . -name "*.*" -o -name "abc*" -print

第一种方法是最容易理解的了,第二个 -name前的 ! 号表示 -not, 与-not的意义是相同的,所以也可以写成:

find . -name "abc*" -not -name "*.*" -print

 

第二种方法: 因为用-name选项的时候,find不支持正则表达式,此时要使用 -regex选项

正则式: '.*/abc[^.]*'

.*/ 表示在当前目录及下及目录中找

[^.]* 表示abc后匹配任意字符,除了.

 

第三种方法看起来很难理解

因为-o 是 or 的意思,也就是或

猛的看起来好像是说找到所有含有. 或者以abc开头的

其实不然

这两个-name构成了这样形式的表达式

Exp1 or Exp2

如果Exp1 为真的话,就不会再判断Exp2

如果Exp1为假,才执行Exp2,非常类似于C语言中的 " || " 符号

所以,如果匹配到有.的文件名,则不会执行后面的了,所以-print此时不会打印

 

今天也意外的发现了一点

find [path...] [expression]

在最后可以用 -exec command

如下:

find . -name "abc*" -exec ls {} /;

以前一直不明白后面加个 {} /;是干什么的

今天总算知道了

其实{} 表示匹配到前面的文件

所以,你也可以这样用:

find . -name "abc*" -exec mv {} {}.old /;

此时所完成的功能就是:

将所有以abc开关的文件,全部在后面加上 .old 后缀

posted on 2013-04-18 11:59  jony413  阅读(2502)  评论(0)    收藏  举报