find(查找)主要沿着文件层次(目录)结构依次向下遍历,匹配符合条件的文件,能够附带执行相应的操做选项,默认的操做结果是打印出符合条件的文件与目录。 |
主要功能以下(全部测试均在当前目录(test)下开始匹配,搜索):html
基本用法linux
列出给定目录(base_path)下全部的文件和子目录:正则表达式
find base_path -print
补充:根据文件名和正则表达式进行搜索,使用选项 -name或-iname(忽略大小写):测试
find base_path -name ‘xxx’ -print find base_path -iname ’xxx‘ -print
否认参数,能够用 !排除所指定到的模式3d
此处将打印出除txt文本文件外的的全部文件。unix
基于目录深度的搜索htm
find命令指定遍历完全部的子目录。使用-maxdepth和-mindefth能够限制find命令遍历的目录深度,而且find命令默认不搜索符号连接,能够用-L选项改变这种行为。blog
例如-maxdepth的参数为1时,只匹配当前目录下。get
-mindepth的参数表明了开始进行匹配的目录到base_path的最短距离。it
基于文件类型搜索
使用-type能够指定搜索的文件类型,linux/unix将全部的的一切都视为文件(文件类型有:普通文件f,目录d,符号连接 l,字符设备c,块设备b,套接字s,FIFO-p),使用 -type选项咱们可以对文件类型进行过滤。
此处就会只匹配出特定项下的全部普通文件,和目录。
根据文件的时间戳进行搜索
Linux/Unix文件系统中的每个文件都有三种时间戳,访问时间(-atime),修改时间(-mtime),变化时间(-ctime),单位为天数,用整数指定,数字前加上+,表示大于这个时间;加上-,表示小于这个天数;不加表示恰好这个天数。
此处的文件是我在进行截图以前才建立的,访问,修改,变化时间均小于一天。
固然相应的用分钟做为单位就能够用选项(-amin)(-mmin)(-cmin),以下咱们测试修改时间
基于文件大小的搜索
find提供了指定文件大小的单位选项进而搜索符合大小文件的功能,这个搜索也经常会让用户感到很是舒服(b:块, c:字节, w:字, k:千字节, M:兆字节, G:吉字节)。
在搜索以前咱们先用ls(list)指令来查看下当前目录下的文件信息:
信息的第五列就是各文件目录的大小(字节),咱们经过指定匹配条件来搜索:
通过测试,在开始目录下,文件类型为普通目录,文件大小大于30个字节的文件就是zl.txt了
基于文件权限和全部权的匹配
-perm选项指定了find指匹配指定权限的文件,参数为文件对应的权限码。
咱们仍然可参考⑥中的全部文件信息的第一列,此处须要掌握必定关于文件权限的知识。以下咱们查找权限为644的普通文件,即用户可读写,组用户可读,其余可读。
也能够用选项-user,匹配指定用户所拥有的文件,参数为用户名或者UID
利用find执行相应操做
好比删除文件,使用-delete选项;删除测试目录下全部的.txt普通文件
还能够利用-exec选项结合其余命令对文件进行更高效的操做,更改文件的所属权,复制文件等,find命令使用一对花括号{}表明文件名,对于每个匹配到的文件,find命令会将{}替换成相应的文件名; 若是-exec的命令有多个参数时,须要注意结尾使用 " \; " 或者 "+",前者表示进行转义,否则系统会觉得是find命令的结尾。
咱们将测试目录下的全部的.txt文件由用户lihongbo转换到用户litao999,咱们必须以root用户进行此操做,chown用于更改权限:
指定find跳过特定的目录
使用-prune选项能够跳过咱们在搜寻的的一些明显咱们不须要的目录
跳过了./test1目录
须要指出的是:选项出现的前后次序咱们也应该考虑到内,由于它会影响到整条命令的执行效率。
提示:本文须要掌握关于ls(list), chown(changeowner)等命令,以及关于Linux/Unix文件系统文件类型和文件权限等知识。