Linux:find命令
0、常用
#去指定目录下找所有的文件 find /tmp -type f #去指定目录下找名字为nginx.conf的文件 find /u01/bin -name nginx.conf #找最近两天内访问的test.sh文件 find / -name test.sh -atime -2 #找2024年内修改过的文件 find . -newermt "2024-01-01" ! -newermt "2024-12-31" #只在当前目录下查找,不深入子目录 find . -maxdepth 1 -type f
1、前言
从各个维度(类型、时间、权限、大小……)查找文件
2、用法
find 路径 选项 动作
在全部目录下查找名为nginx.conf的文件
find / -name nginx.conf
这里的动作是指诸如:-print、-delete、-exec等对搜到的文件进行批量执行的操作。
3、选项
选项 |
说明 |
时间①内容修改时间(modification time,mtime)文件内容变更时,会更新该时间 ②状态修改时间(status time,ctime)文件状态变更(权限、属性……)时,会更新该时间 ③访问时间(access time,atime)每当读取(cat)时,就会更新该时间
|
|
| -atime n、-n、+n | 访问时间,打开、读取 |
| -ctime n、-n、+n | 状态修改时间,权限、所有者修改 |
|
-mtime n -mtime -n -mtime +n |
内容变更 n:n天之前的一天内 +n:n天之前 -n:n天前到现在 |
|
-newer file |
比file新 |
|
-newermt "2025-01-10" |
比2025-01-10更新(更晚) 两个newermt和! newermt并列查找可以实现指定时间区间内的查找 |
用户、组名 |
|
| -uid n | UID |
| -gid n | GID |
| -user name | 用户名 |
| -group name | 组名 |
| -nouser | 不属于任何人 |
| -nogroup | 不属于任何组 |
文件名 |
|
| -name filename | 文件名(严格大小写) |
| -iname filename | 文件名(不区分大小写) |
| -not -name filename | 反向查找文件名 |
| filename中可以用的通配符 |
*:任意字符(*.txt,任意文本文件) ?:单个字符(test?.txt,匹配test1.txt、test2.txt) [ ]:只匹配[ ]内的字符(test[1-3].txt,匹配test1/2/3.txt) |
文件类型 |
|
| -type TYPE |
常用的有f、d、l,分别代表查找file、dir、link三种类型的文件:find /tmp -type f -name "*.txt":/tmp目录下的所有文本文件 find /tmp -type d -name "dir?":/tmp目录下以dir开头的目录,如dir1、dir2、dir3 find /usr/bin -type l -name "java":/usr/bin下所有的java链接 |
文件大小 |
|
| -size [+-]n<单位> |
查找文件大小与n有关的文件,单位支持k、M、G: find /tmp -type f -size 10M:大小正好10MB的文件 find /tmp -type f -size +100M:大小超过100MB的文件 find /tmp -type f -size -1k:大小小于1KB的文件 |
文件权限 |
|
| -perm mode | 权限刚好等于mode,mode为3位的权限数字,如755 |
| -perm -mode | 权限涵盖mode |
| -perm /mode | 包含任一mode的权限 |
其他功能 |
|
| -regex | 允许在文件名中使用正则 |
| -maxdepth n | 最多深入n层目录查找,n为1时仅查找当前目录 |
例子
日期
#将24 小时内有更动过内容 (mtime) 的文件列出 find /tmp -mtime 0 #0 代表目前的时间 #三天前的 24 小时内 find /tmp -mtime 3 #文件日期比 /etc/passwd 新 find /etc -newer /etc/passwd #文件修改日期为2024年的文件 find . -newermt "2025-01-01" ! -newermt "2025-12-31"
用户/组
#/home 下属于 dmtsai 的文件 find /home -user dmtsai #搜寻系统中不属于任何人的文件 find / -nouser
权限
#档名为 passwd find / -name passwd #包含了 passwd 关键词的文件 find / -name "*passwd*" #权限恰好为755的文件 find / -perm 755
4、动作
- -exec 指令:使用别的指令处理搜寻到的结果
- -print:默认,将结果打印
- -delete:删除找到的文件,使用需谨慎,建议先print
1)-print:打印
什么动作都不写时,默认的就是print
find . -name "*.sh" #等价于-print
2)-delete:删除
为了避免误删,建议delete之前先print预览下:
# 先预览要删除的文件 find . -type f -name "*.tmp" -print # 确认后删除 find . -type f -name "*.tmp" -delete
3)-exec:执行命令
语法:-exec <命令> {} \;
其中{}代表前边find的文件,\;代表结束符。这俩都是固定搭配。
#将查找到的文件复制到/tmp/backup目录 find . -type f -name "*.txt" -exec cp {} /tmp/backup/ \; #查找7天前文件并压缩 find /var/log -type f -mtime +7 -name "*.log" -exec gzip {} \;
5、多条件查找
这里的多条件是指上文的文件名、时间、权限的多重组合,在上文的例子中的一次find都只涉及了一个条件。
用法:find 路径 选项1 连接符 选项2 动作
连接符就是常见的与或非:-a、-o、!(或-not)
1)与:-a(默认的,使用多个条件时不写即默认它们之间并列)
查找当前目录下24小时内修改过的.sh普通文件
find . -type f -a -name "*.sh" -mtime -1
2)或:-o
查找.txt或.md文件
find . -name "*.txt" -o -name "*.txt"
3)非:!
#非log文件 find . ! -name "*.log" #既不是log也不是tmp文件 find . ! -name "*.log" ! -name "*.tmp"


浙公网安备 33010602011771号