命令名:find
语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
-name:根据名称查找 (-iname:不区分大小写)
例子1
如上图所示,命令中-name表示根据文件名搜索文件,init是要搜索的文件名,/etc表示在此目录下进行搜索。需要注意的是,上图中的命令只搜索名为init文件,而不是我们常认为的搜索名字中包含init的文件。
例子2
例子1中提到的命令只能查找文件名是init的文件,那么怎样查找文件名中包含init的文件,可以使用通配符来进行查找,如上图所示。如上图所示,*表示任意字符串,因此*init*表示文件名中含有init的文件。类似地,我们可以用*init查找文件名以init结尾的文件。还有一个通配符是问号‘?’,它可以表示单个字符,如'init?'表示文件名是5个字符且前4个字符是init的文件。
例子3
linux中严格区分大小写,这点和windows中不同,也就是说搜索 init 和 INIT 是在搜索两个不同的文件。如果我们想要不区分大小写,可以使用-iname,如上图所示。
-size:根据文件大小查找
例子4
如上图所示,204800表示204800个数据块,一个数据块等于512B,也即0.5K,所以204800=102400K=100M,反过来,根据100M也能求出数据块数应该是204800。上图命令中204800前面的‘+’号表示大于,即查找大小100M的文件,另外‘-’表示小于,‘=’表示等于。所以'find / -size +204800'的意思就是在根目录下查找大于100M的文件。
-user:根据所有者查找 (-group:根据所有组查找)
例子5
如上图所示,该命令查找所有者为xiaoming的所有文件。
根据时间属性查找
-amin:访问时间 (access)
-cmin:文件属性(change)
-mmin:文件内容(modify)
比如:"find /etc -mmin -10"表示查找/etc目录下10分钟以内被修改过属性的文件或目录。其中‘-’减号的含义和例子4相同,即‘-’表示小于(即某个时间之内),‘+’表示大于,‘=’表示等于。
-amin表示访问时间,比如查找5分钟以内被访问的文件或目录,访问文件的命令包括cat、more等命令。
-cmin表示查找某个时间时间范围内被修改属性的文件或目录,文件或目录的属性是指"ls -l"或“ls -ld”所列出的属性
-mmin指查找某个时间范围内被修改内容的文件或目录。
-type:根据文件类型查找
f:文件
d:目录
l:软连接文件
连接选项
-a:两个条件同时满足(and)
-o:两个条件满足其中一个即可(or)
如:“find /etc -name init* -a -type f ”表示在/etc目录下查找以init开头的文件(不包含目录)
'-exec/ok 命令 {} \; ' 把find查找的结果直接进行某种操作
注释:命令表示对查找到的文件所进行的操作,'{} \;'是固定格式
例子6
如图所示,该命令表示在/etc目录下查找以init开头的文件(-a -type f 表示只查找文件,不查找目录及软链接文件,参见上面的-type及连接选项中的-a),并且展示出它们的属性。
例子7
对比例子6和例子7,可以发现-exec和-ok的区别是-ok会在执行操作前进行询问。比如在删除查找到的文件时可以用-ok在删除之前进行询问。
-inum:根据 i 结点查找
例子8
如上图所示,先用ls -i 查看当前目录下各文件或目录的 i 结点,然后用某个 i 结点去查找,可以发现查找到了指定的目录。上图中画线处的 '.' 表示当前目录,命令"find -inum 3551"也可写成“find . -inum 3551”。上图的例子只是用作说明。
再者,-inum可以用来查找一个文件是否存在硬链接,因为硬链接的 i 结点相同,且硬链接只能在同一个分区,那么我们便可以通过在某一个分区查找某个 i 结点来确定该 i 结点所代表的文件是否存在硬链接。