现在的位置: 首页 > 综合 > 正文

在linux下,用find查找以abc开头,但不包含“.”的文件的方法

2012年08月18日 ⁄ 综合 ⁄ 共 724字 ⁄ 字号 评论关闭

 

如下三种方法都可以:

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 后缀

 

(非常感谢CU网友的指点)

抱歉!评论已关闭.