妈妈再也不用担心我找不到文件了---find

简介:

1.find vs locate

在实际中,我们经常需要查找到一些特定文件,然后进行处理,LINUX提供了locate , find这两个命令用于文件查找。

a.locate,非实时查找,非精确查找。linux会定期生成更新文件数据库,而locate将根据文件数据库进行查找。我们可以在使用locate命令前,更新文件数据库,使用updatedb即可。但是updatedb将会花费可能半天时间,SO LONG!


b.find , 实时查找,精确查找。根据指定路径,查找标准,进行文件遍历(包括隐藏文件和子目录)。


c. 显然,locate除了快些,相比find没什么优点。因此,实际中,我们查找文件首选find~


2.How to use find?

find 路径  标准  动作

说明:

关于路径:

我们可以不给,那么就是当前路径。


关于标准:

要知道find查找文件,支持众多标准,比如文件名精确匹配查找,权限,大小,正则等等。


关于动作:

定义查找到文件后可以发生哪些动作。默认的行为就是显示到屏幕上。



3.Some examples about find

实例一:-name 与 globbing

1
2
3
4
5
6
[root@localhost ~] # find . -name "*.sh"
. /manageuser .sh
. /13 .sh
. /17 .sh
. /25 .sh
. /mytask .sh

注意,-name表示根据文件名称进行精确匹配查找,支持文件名通配,即globbing。

【回顾下globbig,有*,?,[]等】

如果,我们不想区分大小写,可以-iname。


实例二:-user 与 -group , -uid 与 -gid

1
2
[root@localhost ~] # find /etc -uid 501
[root@localhost ~] # find /etc -user root

注意,-user,-group分别表示根据文件的属主,属组名称进行查找;-uid,-gid表示根据文件的uid,gid进行查找。那么它们有什么区别呢?


假设,file1的owner是zhangfengzhe,uid是550,如果userdel -r zhangfengzhe,那么文件file1怎么办?它将属于谁呢?

484299    4 ---xrwx--x   1 550      root            0 May 16 15:08 ./file1

可以看到,文件的属主将是uid,就是表示文件已经没有属主了。


可以利用-nouser,-nogroup查找没有属主,属组的文件。


事实上,我们应该定期利用-nouser查找没有属主的文件,然后交给root用户,以防止其他用户趁虚而入!


实例三:-type 'TYPE'

1
2
3
4
5
[root@localhost ~] # find -type d
.
./.gconf
./.gconf /desktop
./.gconf /desktop/gnome

注意,-type表示根据文件类型进行查找。LINUX的文件类型常见的有:

f(file),d(directory),l(linked file),s(socket file),p(pipe file),c(character),b(block)


实例四:-size [+-]Number[k/M/G...]

[root@localhost ~]# find /etc -size +1M 

/etc/selinux/targeted/policy/policy.21

/etc/selinux/targeted/modules/active/base.pp

/etc/selinux/targeted/modules/active/base.linked

/etc/selinux/targeted/modules/active/policy.kern

/etc/gconf/schemas/apps_nautilus_preferences.schemas

/etc/gconf/schemas/metacity.schemas

/etc/gconf/schemas/gnome-terminal.schemas

/etc/gconf/schemas/gok.schemas

/etc/gconf/gconf.xml.defaults/%gconf-tree.xml


注意:

-size 2M 表示的是查找[1M,2M],并不是说查找等于2M的文件

-size +1K 表示查找大于1K的文件,很显然-表示小于


实例五:-atime -ctime -mtime -amin -cmin -mmin

1
[root@localhost ~] # find /etc -atime +7

注意,我们知道文件有3个timestamp:access,change,modify

-atime 7 表示在7天之前访问过的文件

-ctime -3 表示在3天之内修改过的文件

-amin -10 表示10分钟之内访问过的文件


这些有时候非常有用,比如,我们的WEB服务器突然异常了,可能是由于配置文件发生了修改导致的,那么我们就可以查下最近一段时间哪些文件发生了修改。

其实除了上面的,还有-perm MODE来根据权限来查找。我这里就不介绍了,大家自学成才吧~另外,我们可以使用-a,-o,not进行条件组合。默认就是-a。


4.Action for find

当我们找到特定文件后,就可以进行ACTION处理,使用-ok,-exec,xargs即可。格式如下:

find yourpath yourpattern -ok COMMAND \;

find yourpath yourpattern -exec COMMAND \;

find yourpath yourpattern | xargs COMMAND ;

注意,对于-ok,-exec而言,必须注意\;,否则语法错误。

在-ok,-exec的COMMAND中,可以使用{}进行文件名引用。

-ok与-exec的区别在于,-ok需要询问,-exec不需要。

xargs需要以管道的方式进行处理。

实例:

1
2
find  /etc  -size +1M |  xargs  echo  {} >> yourfile;
find  -name  '*.sh'  - exec  cp  {} {}.bak \;


5.小结

专家都从菜鸟来,原来find如此easy~



本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1423692,如需转载请自行联系原作者




相关文章
|
6月前
|
算法 程序员 数据安全/隐私保护
教你怎么用三种办法找到发给你QQ的坦白说的那个人
教你怎么用三种办法找到发给你QQ的坦白说的那个人
63 0
|
5月前
|
Python
爱心代码咯----还缺女朋友吗?(1)
爱心代码咯----还缺女朋友吗?
|
5月前
|
C语言
爱心代码咯----还缺女朋友吗?(3)
爱心代码咯----还缺女朋友吗?
|
存储 编译器 C语言
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
在之前我们编写的程序中,我们总要录入一些数据给予程序用于计算,但是当我们退出程序后录入的数据会销毁,因为此时数据都是存放在内存中。等到下次再运行程序时,数据又得从新录入,这样就非常的难受。
69 0
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
|
6月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
118 0
|
程序员
有了这些不愁找不到对象,520表白代码
有了这些不愁找不到对象,520表白代码
84 0
|
Java 应用服务中间件 Docker
同事嫌我改Bug慢,原来是没掌握这些代码Debug技巧
代码Debug调试是研发工程师日常工作中必不可少的重要组成部分。进行代码Debug调试的目的无非就两个,一个是自我检查代码逻辑是否有问题,便于自己将Bug消灭在测试介入之前;另一个是进行线上问题排查定位,找到实际在跑业务的过程中出现的Bug。
同事嫌我改Bug慢,原来是没掌握这些代码Debug技巧
|
存储 自然语言处理 数据处理
今天,我要干掉 if ... else ...
今天,我要干掉 if ... else ...