j_0055.gif我们知道,Linux下find命令可以在目录中搜索指定文件,并进行相应的操作。find命令提供了相

当强大的查找条件,功能很强大。所以今天我们来分析一下find的用法。与which和whereis不同的是

find在查找文件的时候是真正的在遍历所有的文件,如果find没有找到你所需要的目标的话,那系统中

一定不存在你所需要的文件,因此find在使用的时候会比其他的查找指令更详尽一些,当我们在运行一

个很消耗资源的find指令的时候,人们倾向于将其放在后台运行,因为遍历一个大的文件系统可能需要

很长时间。

  1. 命令格式

    find pathname -options[-print -exe -ok ...]

  2. 命令功能

    在文件树中查找文件,并进行相应操作(可能访问磁盘)。

  3. 命令参数

    pathname:find命令查找的搜索路径,例如用.来表示当前目录,/表示根目录

    -print:将查找后匹配的文件 并将其输出到标准输出上

    -exe:查找一个匹配文件并执行该参数给出的shell命令,相应的命令形式为‘command’{ } \ ;注意{ }和\之间的空格

    -ok:与-exe的作用相同,只不过以一种更安全的模式来执行,每次执行命令之前否会询问,让用户选择是否要执行

  4. 命令选项

    -name:按照文件名来查找

     -perm:按照文件权限来查找

     -prune:使用这一选项可以使find不在当前指定的目录中查找

     -user:按照文件所属用户来查找

     -group:按照文件所述用户组来查找

     -mtime -n/+n:按照文件的修改时间来查找,-n表示文件修改时间距离现在n天以内,+n表示文件修改时间距离现在n天以外,find命令里面还有-atime,-ctime,作用都与-mtime

     -nogroup:查找无效所属组的文件,即该文件在etc/group中不存在

     -nouser:查找无效所属用户的文件,即该文件在etc/passwd中不存在

     -newer file1 !file2查找修改时间比file1新但是比file2旧的文件

     -type:按照文件类型来查找:

      b-块设备文件

     c-字符设备文件

     d-目录文件

     l-符号链接文件

     f-普通文件

     p-管道文件

     -size [n]:[c] 查找文件大小为n块的文件,带有c时表示文件大小以字节计

    -depth:表示查找文件时,先在当前目录中查找,再在当前目录的子目录中查找

(1)按照-name来查找

①、不管当前的搜索路径是什么,当我们要在自己的根目录下来搜索某个文件,可以用~来代表整个根目录,下面来看个栗子: 

wKiom1c2_O7SCxTfAAAbnSMHQy4601.png

其中find ~ -name “fuxin” -print 这一条命令是按照文件名来搜索文件名为fuxin的文件,并将

②、当我们在当前目录及其子目录下搜索目标文件的时候,我们可以用.来代替当前目录,如下:

其输出,注意这里的文件名要用双引号。

linux入门(二):find指令的用法_第1张图片 

③、当我们想在当前目录中寻找一个文件名以小写字母开头的文件,可以用

ind . -name "[a-z]*" -print,示例如下

linux入门(二):find指令的用法_第2张图片

同理大写字母只需要将a-z改成A-Z就可以了

④、当我们想在查找home目录中的文件,可以用:

find ~ -name "*" -print 或find . -print ,示例如下:

linux入门(二):find指令的用法_第3张图片

由于文件太多我这里只截了一部分,剩下的大家可以自己操作试试

(2)按照-perm来查找

写在前面:我们知道一个文件的权限管理有三类人:user,gorup,other,执行事件的属性有读,写,执行,三类,如果一类人用一位八进制来表示的话,我们可以用三位八进制数来表示一个文件的权限。举个例子先~

linux入门(二):find指令的用法_第4张图片

如上图所示,对于文件fuxin来说,对于user来说的权限为读写操作,对应的八进制为7,而对于group来说读写操作,对应的八进制为7,对于other来说权限为读操作,对应的八进制为5,所以文件fuxin的权限为775,这样的方式表示一个文件的权限就很方便了。

①、如果在当前目录下查找权限为XXX的文件,可以用:

find . -perm XXX -print,例子如下:

wKiom1c3CNmjprPbAAAVfTPzZFQ387.png

当我们要查找一个文件的三类人的权限是一样的文件时,例如777,可以讲八进制前面加一个杠,如-007,表示777,示例如下:

linux入门(二):find指令的用法_第5张图片

(3)如何在查找一个文件的时候避开某个目录?

例如:在目录dir1下查找不在目录dir2下的文件

find test -path "dirt/dir2" -prune -o -print

wKioL1c3DQKxOkFRAAAlawl17tU320.png

说明:

find [-path ..] [expression] 

在路径列表的后面的是表达式 

-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 

-path "test" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "test" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。 

这个表达式组合特例可以用伪码写为:

if -path "test" then  

-prune  

else  

-print

(4)使用-user和-nouser选项

①按文件所属主查找,-user

例:在home目录下查找所属主为user1的文件,可以用:

find ~ -user fuxin -print

linux入门(二):find指令的用法_第6张图片

这文件太多我只截了一部分,以实际操作为准。

同理如果在其他目录里查找一个文件,只需要将pathname改成其他路径就好了。

②、查找属主帐户已经被删除的文件,可以使用-nouser选项。

例:在/home目录下查找所有的这类文件,命令:find /home -nouser -print

(5)使用-group和-nogroup选项

①、与-user和-nouser一样,-group和-nogroup是针对文件所属组的,若要在home目录下查找用户组为fuxin的文件,命令:

find ~ -group fuxin -print

linux入门(二):find指令的用法_第7张图片②、要在某个目录里查找无效所属组的文件可以用-nogroup,指令:

find pathname -nogroup -print

(6)使用-mtime -n +n选项

在系统根目录下查找距离今日1日时间的文件

find / -mtime -1 -print

linux入门(二):find指令的用法_第8张图片同理要在目录中查找n日之前的目录,将-n改为+n即可。

(7)使用-newer file1! file2,查找某个比文件file1新且比file2旧 的文件

例如:在home中查找一个比test1新比test2旧的文件

find ~ -newer test1! test2 -print

(8)使用-type选项

在某个目录下查找文件类型为d的文件:

find ~ -type d -print

当查找不同类型的文件只需要改变文件类型就行了。

(9)-size选项,查找长度为n块的文件(1块等于512字节)

如果要在home下查找长度为10000字节的文件:

find ~ -size 10000c -print

如果要在home下查找长度为10000块的文件

find~ -size 10000 -print

(10)-depth选项

在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

在根目录中查找一个文件名为file的文件 

find / -name "file" -depth -print


linux入门(二):find指令的用法_第9张图片

以上便是find常见指令的用法啦,写了好久,希望大家能够为我指出不足之处共同进步,谢谢啦!j_0046.gif