find命令使⽤说明
1、命令概述
find命令⽤来在指定⽬录下查⽂件。任何位于参数之前的字符串都将被视为欲查的⽬录名。find参数选项很多,并且⽀持正则,功能强⼤。和管道结合使⽤可以实现复杂的功能,是系统管理者和普通⽤户必须掌握的命令。如果使⽤该命令时,不设置任何参数,则find命令将在当前⽬录下查⼦⽬录与⽂件。并且将查到的⼦⽬录和⽂件全部进⾏显⽰。如果服务器负载⽐较⾼尽量不要在⾼峰期使⽤find命令,find 命令模糊搜索还是⽐较消耗系统资源的。
2、命令语法
find【路径】【选项】【参数】
3、命令选项
-amin<;分钟>:查在指定时间曾被存取过的⽂件或⽬录,单位以分钟计算;
-anewer<;参考⽂件或⽬录>:查其存取时间较指定⽂件或⽬录的存取时间更接近现在的⽂件或⽬录;
-atime<24⼩时数>:查在指定时间曾被存取过的⽂件或⽬录,单位以24⼩时计算;
-cmin<;分钟>:查在指定时间之时被更改过的⽂件或⽬录;
-cnewer<;参考⽂件或⽬录>查其更改时间较指定⽂件或⽬录的更改时间更接近现在的⽂件或⽬录;
-ctime<24⼩时数>:查在指定时间之时被更改的⽂件或⽬录,单位以24⼩时计算;
-daystart:从本⽇开始计算时间;
-depth:从指定⽬录下最深层的⼦⽬录开始查;
-expty:寻⽂件⼤⼩为0 Byte的⽂件,或⽬录下没有任何⼦⽬录或⽂件的空⽬录;
-exec<;执⾏指令>:假设find指令的回传值为True,就执⾏该指令;
-false:将find指令的回传值皆设为False;
-fls<;列表⽂件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表⽂件;
-follow:排除符号连接;
-fprint<;列表⽂件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表⽂件;
-fprint0<;列表⽂件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表⽂件;
-fprintf<;列表⽂件><;输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表⽂件;
-fstype<⽂件系统类型>:只寻该⽂件系统类型下的⽂件或⽬录;
-gid<;组识别码>:查符合指定之组识别码的⽂件或⽬录;
-group<;组名称>:查符合指定之组名称的⽂件或⽬录;
-help或——help:在线帮助;
-ilname<;范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符⼤⼩写的差别;
-iname<;范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符⼤⼩写的差别;
-inum<inode编号>:查符合指定的inode编号的⽂件或⽬录;
-ipath<;范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符⼤⼩写的差别;
-iregex<;范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符⼤⼩写的差别;
-links<;连接数⽬>:查符合指定的硬连接数⽬的⽂件或⽬录;
-iname<;范本样式>:指定字符串作为寻符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将⽂件或⽬录名称列出到标准输出;
-maxdepth<⽬录层级>:设置最⼤⽬录层级;
-mindepth<⽬录层级>:设置最⼩⽬录层级;
-mmin<;分钟>:查在指定时间曾被更改过的⽂件或⽬录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24⼩时数>:查在指定时间曾被更改过的⽂件或⽬录,单位以24⼩时计算;
-name<;范本样式>:指定字符串作为寻⽂件或⽬录的范本样式;
-newer<;参考⽂件或⽬录>:查其更改时间较指定⽂件或⽬录的更改时间更接近现在的⽂件或⽬录;
-nogroup:出不属于本地主机组识别码的⽂件或⽬录;
-noleaf:不去考虑⽬录⾄少需拥有两个硬连接存在;
-nouser:出不属于本地主机⽤户识别码的⽂件或⽬录;
-ok<;执⾏指令>:此参数的效果和指定“-exec”类似,但在执⾏指令之前会先询问⽤户,若回答“y”或“Y”,则放弃执⾏命令;
-path<;范本样式>:指定字符串作为寻⽬录的范本样式;
-perm<;权限数值>:查符合指定的权限数值的⽂件或⽬录;
-print:假设find指令的回传值为Ture,就将⽂件或⽬录名称列出到标准输出。格式为每列⼀个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将⽂件或⽬录名称列出到标准输出。格式为全部的名称皆在同⼀⾏;
-printf<;输出格式>:假设find指令的回传值为Ture,就将⽂件或⽬录名称列出到标准输出。格式可以⾃⾏指定;
-prune:不寻字符串作为寻⽂件或⽬录的范本样式;
-regex<;范本样式>:指定字符串作为寻⽂件或⽬录的范本样式;
-size<⽂件⼤⼩>:查符合指定的⽂件⼤⼩的⽂件;
-true:将find指令的回传值皆设为True;
-type<⽂件类型>:只寻符合指定的⽂件类型的⽂件;
-uid<⽤户识别码>:查符合指定的⽤户识别码的⽂件或⽬录;
-used<⽇数>:查⽂件或⽬录被更改之后在指定时间曾被存取过的⽂件或⽬录,单位以⽇计算;
-user<;拥有者名称>:查符和指定的拥有者名称的⽂件或⽬录;
-version或——version:显⽰版本信息;
-xdev:将范围局限在先⾏的⽂件系统中;
-xtype<⽂件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。-o:并列条件查询
-i<;选项>:忽略⼤⼩写
!:否定参数,取⾮值。
4、命令⽰例
列出当前⽬录及⼦⽬录下所有⽂件和⽂件夹:
1 [root@localhost ~]# find .
2或
3 [root@localhost ~]# find . -print
在/tmp ⽬录下查以 .txt 结尾的⽂件名:
1 [root@localhost ~]# find /tmp/ -name "*.txt"
同上,但忽略⼤⼩写:
1 [root@localhost ~]# find /tmp/ -iname "*.txt"
在 /tmp ⽬录及⼦⽬录下查所有以 .txt 和 .bak 结尾的⽂件:
1 [root@localhost ~]# find /tmp/ -name "*.txt" -o -name "*.bak"
2或者
3 [root@localhost ~]# find /tmp/ \( -name "*.txt" -o -name "*.bak" \)
匹配⽂件路径或者⽂件查:
1 [root@localhost ~]# find /tmp/ -path "*local*"          #查路径中或者⽂件名中包含 local 的路径或⽂件
基于正则表达式匹配⽂件路径:
1 [root@localhost ~]# find /tmp/ -regex ".*\(\.txt\|\.bak\)$"
同上,但忽略⼤⼩写:
1 [root@localhost ~]# find /tmp/ -iregex ".*\(\.txt\|\.bak\)$"
否定参数!:
出 /tmp ⽬录下不是以 .txt 结尾的⽂件:
1 [root@localhost ~]# find /tmp/ ! -name ".txt"
根据⽂件类型进⾏搜索:
find /tmp/ -type 类型参数
类型参数列表:
  f:普通⽂件
  l:符号连接
  d:⽬录
  c:字符设备
  b:块设备
  s:套接字
  p:Fifo
基于⽬录层级深度搜索:
搜索最⼤⽬录层级为3的⽂件:
1 [root@localhost ~]# find /usr/ -maxdepth 3 -type f
搜索出深度距离当前⽬录⾄少2个⼦⽬录的所有⽂件:
1 [root@localhost ~]# find /usr/ -mindepth
2 -type f
根据⽂件时间戳进⾏搜索:
find /tmp -type f 时间戳
访问时间(-atime/天,-amin/分钟):⽤户最近⼀次访问时间。
修改时间(-mtime/天,-mmin/分钟):⽂件最后⼀次修改时间。
find查命令的使用
状态时间(-ctime/天,-cmin/分钟):⽂件状态最后⼀次修改时间。
搜索最近七天内被访问过的所有⽂件、搜索恰好在七天前被访问过的所有⽂件、搜索超过七天被访问过的所有⽂件:
1 [root@localhost ~]# find /tmp/ -type f -atime -7      #7天内的
2 [root@localhost ~]# find /tmp/ -type f -atime 7      #第7天当天的
3 [root@localhost ~]# find /tmp/ -type f -atime +7      #超过7天的
搜索访问时间超过10分钟的所有⽂件:
1 [root@localhost ~]# find /tmp/ -type f -amin +10    #超过⼗分钟
2 [root@localhost ~]# find /tmp/ -type f -amin 10      #等于⼗分钟
3 [root@localhost ~]# find /tmp/ -type f -amin -10    #⼩于⼗分钟
在 /tmp ⽬录下出⽐ a.txt ⽂件修改时间更长的所有⽂件:
1 [root@localhost ~]# find /usr/ -type f -newer /
根据⽂件⼤⼩进⾏匹配:
find /tmp -type f size ⽂件⼤⼩单元
⽂件⼤⼩单元:
  b:块(512字节)
  c:字节
  w:字(2字节)
  k:千字节
  M:兆字节
  G:G字节
搜索⼤于10KB的⽂件、搜索⼩于10KB的⽂件、搜索等于10KB的⽂件:
1 [root@localhost ~]# find /tmp/ -type f -size +10k    #⼤于10k
2 [root@localhost ~]# find /tmp/ -type f -size -10k    #⼩于10k
3 [root@localhost ~]# find /tmp/ -type f -size 10k      #等于10k
删除匹配的⽂件:
删除当前⽬录下所有 .txt ⽂件:
1 [root@localhost ~]# find /tmp/ -type f -name "*.txt" -delete
根据⽂件权限、所有权进⾏匹配:
在 /tmp ⽬录下搜索出权限为777的⽂件、在 /tmp ⽬录下搜索出权限⾮644的⽂件:
1 [root@localhost ~]# find /tmp/ -type f -perm 777
2
3 [root@localhost ~]# find /tmp/ -type f ! -perm 644
出 /tmp ⽬录⽤户 liuzgg 拥有的所有⽂件:
1 [root@localhost ~]# find /tmp/ -type f -user liuzgg
出 /tmp ⽬录⽤户组 job 拥有的所有⽂件:
1 [root@localhost ~]# find /tmp/ -type f -group job
借助-exec选项与其他命令结合使⽤:
出 /tmp ⽬录下所有root的⽂件,并把所有权更改为⽤户liuzgg:
1 [root@localhost ~]# find /tmp/ -type f -user root -exec chown liuzgg {} \;
上例中,{} ⽤于与-exec选项结合使⽤来匹配所有⽂件,然后会被替换为相应的⽂件名。
出⾃⼰家⽬录下所有的 .txt ⽂件并删除:
1 [root@localhost ~]# find $HOME/. -name "*.txt" -ok rm {} \;
2 [root@localhost ~]# find $HOME/ -name "*.txt" -ok rm {} \;
3 [root@localhost ~]# find $HOME -name "*.txt" -ok rm {} \;
4 [root@localhost ~]# find ~ -name "*.txt" -ok rm {} \;
以上4中⽅式都⾏,注意:带有 .txt 的隐藏⽂件也⼀并删除。
上例中,-ok和-exec⾏为⼀样,不过它会给出提⽰,是否执⾏相应的操作。
查 /tmp ⽬录下所有 .txt ⽂件并把他们拼接起来写⼊到 ⽂件中:
1 [root@localhost ~]# find /tmp/ -type f -name "*.txt" -exec cat {} \;> /
将30天前的.log⽂件复制到old⽬录中:
1 [root@localhost ~]# find /tmp/ -type f -mtime +30 -name "*.txt" -exec cp {} /tmp \;
出 /tmp ⽬录下所有 .txt ⽂件并以 “File:⽂件名” 的形式打印出来:
1 [root@localhost ~]# find /tmp/ -type f -name "*.txt" -exec printf "File: %s\n" {} \;
2 File: /
3 File: /
4 File: /
5 [root@localhost ~]#
因为单⾏命令中-exec参数中⽆法使⽤多个命令,以下⽅法可以实现在-exec之后接受多条命令-exec ./text.sh {} \;
搜索但跳出指定的⽬录,查当前⽬录或者⼦⽬录下所有.txt⽂件,但是跳过⼦⽬录/tmp/work:1 [root@localhost ~]# find /tmp/ -path "/tmp/work" -prune -o -name "*.txt"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。