简介
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
选项
选项 | 说明 |
---|---|
-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<范本样式> | 指定字符串作为寻找符号连接的范本样式; |
-maxdepth<目录层级> | 设置最大目录层级; |
-mindepth<目录层级> | 设置最小目录层级; |
-mmin<分钟> | 查找在指定时间曾被更改过的文件或目录,单位以分钟计算; |
-mount | 此参数的效果和指定“-xdev”相同; |
-mtime<24小时数> | 查找在指定时间曾被更改过的文件或目录,单位以24小时计算; |
-name<范本样式> | 指定字符串作为寻找文件或目录的范本样式; |
-newer<参考文件或目录> | 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; |
-nogroup | 找出不属于本地主机群组识别码的文件或目录; |
-noleaf | 不去考虑目录至少需拥有两个硬连接存在; |
-nouser | 找出不属于本地主机用户识别码的文件或目录; |
-ok<执行指令> | 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令; |
-path<范本样式> | 指定字符串作为寻找目录的范本样式; |
-perm<权限数值> | 查找符合指定的权限数值的文件或目录; |
假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串; | |
-print0 | 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行; |
-printf<输出格式> | 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定; |
-prune | 不寻找字符串作为寻找文件或目录的范本样式; |
-regex<范本样式> | 指定字符串作为寻找文件或目录的范本样式; |
-size<文件大小> | 查找符合指定的文件大小的文件; |
-true | 将find指令的回传值皆设为True; |
-typ<文件类型> | 只寻找符合指定的文件类型的文件; |
-uid<用户识别码> | 查找符合指定的用户识别码的文件或目录; |
-used<日数> | 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算; |
-user<拥有者名称> | 查找符和指定的拥有者名称的文件或目录; |
-version或——version | 显示版本信息; |
-xdev | 将范围局限在先行的文件系统中 |
-xtype<文件类型> | 此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。 |
文件类型
基于文件类型搜索
find . -type 类型参数
类型参数列表:
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
三种时间戳
UNIX/Linux文件系统每个文件都有三种时间戳:
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
例子
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
【例1】查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
【例2】找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
【例3】将/home/tong/test 目录下大于100K的文件转移到/tmp目录:
find /home/tong/test -type f -szie +100k |xargs -i mv {} /tmp/
【例4】所有子目录的数量:
[root@localhost ~]# find /etc/ -type d | wc -l
【例5】查找home目录下的所有空文件
$ find ~ -empty
【例6】查找10天内未被修改的文件并删除命令:
find . -ctime +30 -name "*.*" -exec rm -Rf {} \;
【例7】 查1天之内被存取过的文件
find /home -atime -1
【例8】查找在系统中最后24小时里修改过的文件
find / -mtime -1
【例9】 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -used -2
【例10】 从第2层开始查
find /home -name tmp.txt -mindepth 3