linux find 命令

find命令

find命令用来在指定目录下查找文件。

格式: find 目录 -选项 动作[-print -exec -ok ...]

常用选项

-a:and 必须满足两个条件才显示
-o:or 只要满足一个条件就显示
-name:按照文件名查找文件
-iname:按照文件名查找文件(忽略大小写)
-type:根据文件类型进行搜索
-perm:按照文件权限来查找文件
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-fprint 文件名:将匹配的文件输出到文件。
-size:指定大小搜索文件 -newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件

常用动作:

-print  默认动作,将匹配的文件输出到标准输出
-exec   对匹配的文件执行该参数所给出的命令。相应命令的形式为 'command' { } \;,注意{ }和\;之间的空格。
-ok     和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-delete 将匹配到的文件删除 
  • 按照文件名称搜索
View Code
  • 根据文件类型进行搜索

格式;find 搜索路径 [选项] 搜索内容

选项:

-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件
-type b: 块设备
-type s: 套接字
View Code
  • 基于目录深度搜索
向下最大深度限制为3
find /usr/local/ -maxdepth 3 -type d

搜索出深度距离当前目录至少2个子目录的所有文件
find /usr/local/ -mindepth 2 -type f

 

  • 根据文件时间戳进行搜索

UNIX/Linux文件系统每个文件都有三种时间戳:

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

stat 命令查看:

 

示例:

搜索最近七天内被访问过的所有文件
find /etc/ -type f -atime -7

搜索超过七天内(7天外)被访问过的所有文件
find /etc -type f -atime +7

 

  • 根据文件大小进行匹配

用法 

find . -type f  -size 文件大小单元

 

文件大小单元:

   b —— 块(512字节)
    c —— 字节
    w —— 字(2字节)
    k —— 千字节
    M —— 兆字节
    G —— 吉字节

示例

搜索大于10KB的文件
find /etc/ -type f -size +10k

搜索小于10KB的文件

find /etc/ -type f -size -10k

搜索等于10KB的文件
 find /etc/ -type f -size 10k

搜索大于10G的日志文件,并删除
find /var/log -type f -name "*.log" -size +10G -delete

 

  • 根据文件权限/所有权进行匹配
指定目录下搜索出权限为644的文件
find / -type f -perm 644

找出指定目录下权限不是644的txt文件
find / -type f -name "*.txt" ! -perm 644

找出/home目录用户frank拥有的所有文件
find /home/ -type f -user frank

找出/home目录用户组frank拥有的所有文件
find /home/ -type f -group frank

 

  • 借助-exec选项与其他命令结合使用

找出/tmp目录下所有root的文件,并把所有权更改为用户frank

find /tmp/ -type f -user root -exec chown frank {} \;
使用占位符{}来表示find到的文件名

 

找出home目录下所有的.sh文件并删除

[root@localhost home]# find $HOME -name "*.sh" -ok rm {} \;
< rm ... /root/install_lnmp.sh > ? y
-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。

 

查找/home目录下所有.txt文件并把他们拼接到all.txt文件中

find /home/ -type f -name "*.txt" -exec cat {} \;>all.txt

 

查找/home目录下所有.txt文件并把他们复制到/opt/backup文件中

find /home/ -type f -name "*.txt" -exec cp {} /opt/backup/ \;

 

在/var/log目录中查找更改时间在5日以前的文件并删除它们:

find /var/log -type f -mtime +5 -exec rm {} \;

 

posted @ 2023-01-06 15:37  r1-12king  阅读(231)  评论(0编辑  收藏  举报