记录学习笔记、分享资源工具、交流技术思想、提升工作效率

find命令总结

运维 xiaomudk 6年前 (2015-06-20) 1274次浏览 0个评论

find 查找文件或目录

命令格式:

find 目录 [查找规则] [查找完处理方法]

查找规则:

  • 按文件名查找(常用)
find /var/log -name "*.log"     #查找/var/log下以.log结尾的文件
find /var/log -iname "*.log"    # -iname表示不区分大小写
find /var/log ! -name "*.log"   #把*.log结尾的文件过滤掉
  • 按时间查找(常用)
find /var/log -mtime +7     #查找/var/log下七天前修改的文件. 如果 -mtime -7 刚是七天内修改的文件

按天来查找 
-mtime   -n +n              #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n             #按文件访问时间来查
-ctime    -n +n             #按文件创建时间来查找文件

按分钟来查找

-mmin   -n +n              #按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前
-amin    -n +n             #按文件访问时间来查
-cmin    -n +n             #按文件创建时间来查找文件
  • 按文件类型查找(常用)
find /var/log -type f       #查找/var/log 下的普通文件

    f     普通文件(常用)
    d     目录文件(常用)
    l     链接文件
    b     块设备文件
    c     字符设备文件
    p     管道文件
    s     socket文件
  • 按用户或用户组进行查找
find /var/log -user www    #查找www用户的文件
find /var/log -group www   #查找www组的文件

find /var/log -uid  500     #查找uid为500的文件
-uid -500  uid小于500
-uid +500  uid大于500

find /var/log -gid 500     #查找gid为500的文件

find /var/log -nouser      #列出/home内不属于本地用户的文件或目录
find /var/log -nogroup     #列出/home内不属于本地组的文件或目录
  • 按文件权限进行查找
find /var/log -perm 0644   #查权限为644的文件或目录
  • 按文件大小查找
find /var/log -size 10M    #查找10M大小的文件(单位可以为K,M,G)
-size -10M  小于10M
-size +10M  大小10M

find /var/log -empty       #查找大小为0的文件或空目录
  • 指定查找的目录深度
find /var/log -name "*.log" -maxdepth 4     #查时深度最多为3层
find /var/log -name "*.log" -mindepth 3     #从第2层开始查
  • 排除目录
find ./ -path "./DontSearchPath" -prune -o -name "datafile*" -print  #当前目录下,避开DontSearchPath子目录,搜索所有文件名为datafile*的文件。
find ./ \( -path "./DontSearchPath" -o -path "./DoSearchPath" \) -prune -o -name "datafile*" -print #当前目录下,同时避开DontSearchPath和DoSearchPath两个子目录,搜索所有文件名为datafile*的文件。

-path pathname -prune:   避开指定子目录pathname查找。
-path expression -prune:  避开表达中指定的一组pathname查找。

需要说明的是,如果同时使用-depth选项,那么-prune将被find命令忽略。
必须要注意要忽略的路径参数必须紧跟着搜索的路径之后

-prune   不在当前指定的路径查找
-depth   查找时,首先查找当前目录文件,然后再在其子目录查找
  • 组合条件
-a:与条件
-o:或条件
-not:非条件

查找完处理方法

  • find 自带的三种
-print          #将匹配的文件输出到标准输出。
-exec:         #匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{ }和\;之间的空格。{}理解成find到的内容就可以了 (常用)
-ok:           #和-exec的作用相同,只不过在执行每一个命令之前,都会给出提示,让用户来确定是否执行。(很少用)

例子:

find /var/log -name "*.log" -maxdepth 1 -exec rm -rf {} \;
find /var/log -name "*.log" -maxdepth 1 -exec mv {} {}.log \;
  • find 与xargs 结合(常用)

一般情况下使用xargs处理文件比-exec效率要高

find /var/log -name "*.log" -maxdepth 1 | xargs rm -rf
  • xargs 与exec的区别
-exec
    1.参数是一个一个传递的,传递一个参数执行一次rm
    2.文件名有空格等特殊字符也能处理
-xargs
    1.一次将参数传给命令,可以使用-n控制参数个数
    2.处理特殊文件名(文件名中有空格等情况)需要采用如下方式:
    find . -name "*.txt" print0 |xargs -0 rm -rf
    3.xargs参数一个一个传递
    find . -name "*.txt"  print0 |xargs -0 -n 1  rm -rf

本网站采用知识共享署名-相同方式共享 4.0 国际许可协议进行授权
转载请注明原文链接:find命令总结
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址