通过上一篇的学习,我们知道了如何访问文件,如何创建、移动、复制及删除文件,最后我们了解了多种操作文件内容的命令。上篇博客提到的命令都是对已知的文件进行操作,今天,我们学一个命令用于在指定路径下查找满足用户条件的文件,find命令,find顾名思义,翻译为中文为“查找”。下面,我们来看看find命令怎么使用吧!
find的使用格式为:find 查找路径 查找条件 查找到后的处理方式
默认情况下查找路径为当前目录,查找条件为指定路径下的所有文件,查找到后的处理方式为显示。
查找条件:
既然是查找,那我们当然需要提供一些筛选条件,以便精确匹配到我们需要的文件,Linux给用户提供了众多查找条件,常用查找条件如下:
-name ‘filename’ #对文件名作精确匹配;filename支持文件名通配(后面篇章会学到,现在先知道有这么回事就行),文件名通配符有:* 匹配任意长度的任意字符;? 匹配任意单个字符;[] 匹配指定范围内的任意单个字符,如[a-z] 匹配所有小写字母;[^] 匹配指定范围外的任意单个字符,如[^0-9] 匹配非数字;[:space:] 空白字符;[:punct:] 标点符号;[:lower:] 小写字母;[:upper:] 大写字母;[:alpha:] 大小写字母;[:digit:] 数字;[:alnum:] 数字和大小写字母;最后7个使用时外面还有加‘[]’,如[[:space:]] 匹配空白字符。
-iname ‘filename’ #文件匹配时不区分大小写
-regex pattern #基于正则表达式进行文件名匹配(正则表达式后面也会学到)
-user username #根据文件属主查找
-group groupname #根据属组查找
-uid UID #根据UID查找(用户ID号)
-gid GID #根据GID查找(属组ID号)
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件
-type #根据文件类型查找。f 普通文件;d 目录;c 字符设备;b 块设备;l 链接文件;p 管道;s 套接字类型文件;如find ~ -type d
-size #[+|-]nk、nM、nG 根据文件大小查找,加减表示大于小于nk、M或G的文件。如find ~ -size +10k 查找用户目录大于10k的文件
当同时指定多个条件查找时,可使用以下组合条件:
-a #同时满足才显示,and(与),为系统默认方式
-o #满足一个或部分就显示,or(或者)
-not #非
例如:find /tmp –nouser –a –type d #查找/tmp下没有属主且类型为目录的文档
根据文件时间戳查找:
以天为单位
-mtime [+|-]num #根据文件修改时间查找
-ctime [+|-]num #根据文件改变时间查找
-atime [+|-]num #根据文件访问时间查找
以分钟为单位
-mmin [+|-]num
-cmin[+|-]num
-amin[+|-]num
根据权限查找:
-perm mode #精确匹配
-perm –mode #文件权限能完全包含此mode时才能显示
-perm /mode #有一位权限匹配即可
查找到后的处理方式:
-print #显示,默认选项
-ls #类似ls –l
-ok command \;
-exec command \; #-ok和-exec均为修改文件方法,两者区别为是否存在与用户交互。若command后要接find找到的文件,需加{}替代。如find ~ -type –d –ok chmod +x {} \; find ~ -perm -020 –exec mv {} {}.new \;
find除了与-ok、-exec结合使用外,find也经常和xarge一起用
例如:find /etc –size +1M | xargs echo >> /xiaosheng.txt
以上是find命令常用的选项,其它选项或详细说明请查看使用说明(man find)
参考资料:马哥Linux、Linux从入门到精通