Linux常用命令详解之文件搜索命令二

时间:2022-08-21 09:19:42

二,(1)命令名称:find(很复杂)

      (3)命令所在路径:/usr/bin/find

      (4)执行权限:所有用户

      (5)功能描述:查找文件或目录

      (6)语法:which  [搜索路径]  [搜索关键字]

细节:

(1)搜索路径:即指定搜索的范围,一定要注意尽可能的缩小查找的范围,一般不允许以根目录(相当于windows中的“我的电脑”)为查找范围,这样会占用大量的资源,有时候是不可估量的,不要动不动不以根目录为范围来查找,这样可能在你看来只是快了一点点,但是对于系统来说,遍历硬盘是一个非常消耗资源的操作,一定要尽可能的减少资源的消耗,这一点是非常重要的;

(2)搜索关键字:即搜索的方法,也就是以什么来定位

      搜索方法很多,常用有:

-name

以文件名查找

(这时候就会用到文件通配符了,如下小知识所讲)

如:查看etc下以inint开头的文件

find  /etc  -name  init*

-type

以文件类型查找

(1)ffile):表示二进制文件

(2)llink):表示软连接文件

(3)ddirectory:表示目录

如:查看etc下的所有目录

find  /etc  -type  d

-inum

i节点号查找

查找节点号为78的文件:find  /etc  -inum  78

-size

以文件大小查找

(1)大小的写法:

Linux中一般都是以数据块为单位查找,而:

1block = 512字节 

1KB = 1024字节

1M=1024KB

(2)大小的表示方法,有三种

     大于:+

     小于:-

     等于:什么都不写

如:查找100M的文件

(1)大小:

100M=102400KB=204800block

(2)查找大于100M的文件:

+204800

3)命令为:

find  /etc  -size  +204800

-user

根据文件的所有者查找

find  /etc  -user  lakers

根据文件改变的时间查找

以天为单位

ctimeatimemtime

(time表示天)

(1)c--change:表示文件的属性(即ls -l查看到的内容)被改变

(2)a--access:表示文件被访问过

(3)m--modify:表示文件的内容(即正文)被修改过

前缀的含义

(1)时间范围之外:+

2)时间范围之内:-   

3)具体时间:什么都不写

以分钟为单位

cminaminmmin

min表示分钟)

如:查找/etc下,两天之内被修改过的文件

find  /etc  -ctime  -2

小知识:

1,文件路径通配符

1)问号通配符“?”:匹配文件中的单个字符,如:文本模式data?.dat,能匹配data+任意单个字符+.dat的文件名,比如data2.dat

2)星号通配符“*”:匹配文件中的零个或多个字符,如:文本模式data*.dat,能匹配data+任意零个或多个字符+.dat的文件名,比如data2.datdata.datdatatcccccc.dat

2,连接符

第一组:逻辑连接符

在使用范围查找的时候就要用到连接符了

1-aand):表示逻辑与

2-oor):表示逻辑或

比如:

1)查找/etc下大于80M小于100M的文件

      find   /etc  -size  +163840  -a   -size  -204800

2)查找/etc下大于80M的目录

      find   /etc  -size  +163840  -a  -type  d

第二组:用于查找到文件后执行某个命令

固定格式:

find  ...... -exec或者-ok  命令  {}  \; 

(1){}:表示find查询的结果

(2)\:它是转义符,即使符号、命令等使用本身的含义

(3);:表示结束

(4)-exec与-ok的区别就是:-exec是查找到文件后直接执行命令,不会询问;而-ok在查找到文件后会询问你是否执行命令;

如:查找/etc下的名字为init的文件并把它删除

     find  /etc  -name  init  -exec  rm {} \;

扩展:

当文件名比较特殊时(如”a  b“),我们在用rm删除时是删除不了的,系统会以为你是要删除ab文件,这时就需要根据文件的i节点号俩删除了:

步骤:

(1)找到文件的i节点号:ls  -i

(2)使用find根据i节点号查找,并调用删除命令:

     find -inum 节点号  -ok  rm  {}  \;

     表示当前目录

 

注意:

find一个通用的命令,可以查找所以文件,当然就包括命令了,它类似于windows中的文件搜索;区别在于,如果windows中会列出所有文件名中包含指定名称的文件,而find命令要实现这个功能就得用通配符。