find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
选项-name的参数指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。
而-iname参数则是忽略大小写。
如果想匹配多个条件中的一个,可以采用OR条件操作:
如果是且的条件则可以什么都不写,也可以写-and。
选项-path可以使用通配符来匹配文件路径或文件。-path将文件路径作为一个整体进行匹配。
选项-regex基于正则表达式来匹配文件路径的。
可以用!否定参数的含义。
find命令在使用时会遍历所有的子目录。我们可以采用一些深度参数来限制find命令遍历的深度。-maxdepth和-mindepth就是这类参数。
如果只需在当前目录中进行检索,则可以设定最大深度-maxdepth为1:
而最小深度-mindepth则可以用来查找那些距离起始路径超过一定深度的所有文件。
-type选项可以根据文件类型来进行搜索。
下表显示了所有的文件类型参数:
文件类型 | 类型参数 |
普通文件 | f |
符号链接 | l |
目录 | d |
字符设备 | c |
块设备 | b |
套接字 | s |
Fifo | p |
Linux文件系统中的每一个文件都有三种时间戳,如下所示:
· 访问时间(-atime):用户最近一次访问文件的时间。
· 修改时间(-mtime):文件内容最后一次被修改的时间。
· 变化时间(-ctime):文件元数据最后一次改变的时间。
在Linux中没有所谓“创建时间”的概念。
-atime、-mtime、-ctime可以作为find的时间选项,它们可以整数值给出,单位是天。数值前可以加上加号或者减号,表示大于或者小于多少天。
上图三行命令分别表示7天之内访问过、7天之前访问过以及恰好7天前访问过三种情况。
对应的-amin,-mmin,-cmin用来表示分钟。
-newer参数可以找到比参考文件更新的所有文件。
选项-size可以基于文件的大小来进行搜索。
在find命令最后加上-delete选项可以删除查找到的匹配文件。
选项-perm可以匹配特定权限的文件:
-exec选项可以让find和其他命令一起执行:
-exec还可以执行sh文件:
注意:查找到多少个文件就执行sh文件多少遍。