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/passwdfind /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"

 

posted @ 2023-08-10 18:14  ShineLe  阅读(72)  评论(0)    收藏  举报