linux命令之find查找文件

简介: find 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find


find 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。


语法


find  path  -option  [ -print ]   [ -exec   -ok   command ]   {} \;


上面的 find的常用形式可以简化为:


find [path...] [expression]


  • path:所查找的目录路径。例如,用.来表示当前目录,用/来表示系统根目录


  • expression:可以分为 “-options [-print -exec -ok ...]”


  • -options,指定find命令的常用选项,下节详细介绍
  • -print,find命令将匹配的文件输出到标准输出
  • -exec,find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格
    find ./ -size 0 -exec rm {} \; 删除文件大小为零的文件 (还可以以这样做:rm -i find ./ -size 0find ./ -size 0 | xargs rm -f &
  • 为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l { } \;
    在/logs目录中查找更改时间在5日以前的文件并删除它们:find /logs -type f -mtime +5 -exec rm { } \;
  • -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    find . -name "*.conf" -mtime +5 -ok rm { } \; 在当前目录中查找所有文件名以.conf结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示


参数


expression 中可用选项非常之多


  • -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
  • -amin n : 在过去 n 分钟内被读取过
  • -anewer file : 比文件 file 更晚被读取过的文件
  • -atime n : 在过去n天内被读取过的文件
  • -cmin n : 在过去 n 分钟内被修改过
  • -cnewer file :比文件 file 更新的文件
  • -ctime n : 在过去n天内被修改过的文件
  • -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
  • -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
  • -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
  • -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
  • -type c : 文件类型是 c 的文件


文件类型 说明
d 目录
c 字符设备
b 块设备
p 管道
f 普通文件
l 符号链接
s 套接字文件


实例


(1)根据文件名查找


-name //根据文件名查找(精确查找)
-iname //根据文件名查找,但是不区分大小写


这里另外介绍下文件名通配符的知识


*表示通配任意的字符


find /etc -name "*passwd"


?表示通配任意的单个字符


find /etc -name "passwd?"

[ ] 表示通配括号里面的任意一个字符


find /etc -name "[ab].sh"


(2)根据文件所属用户和组来查找文件


-user //根据属主来查找文件
-group //根据属组来查找文件


(3)根据 uid 和 gid来查找用户


find  /tmp  -uid  500  //查找uid是500 的文件
 find  /tmp  -gid  1000 // 查找gid是1000的文件


(4)-a and -o and –not的使用


ps:有用


-a 连接两个不同的条件(两个条件必须同时满足)
-o 连接两个不同的条件(两个条件满足其一即可)
-not 对条件取反的


find /tmp -name "*.sh" -a -user root
find /tmp -not -user root


(5)根据文件时间戳的相关属性来查找文件


可以使用stat命令来查看一个文件的时间信息


如下:


stat /etc/passwd


-atime
-mtime
-ctime
-amin
-mmin
-cmin


所以这里atime, mtime, ctime就是分别对应的 “最近一次访问时间” “最近一次内容修改时间” “最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟


find /tmp –atime +5      //表示查找在五天内没有访问过的文件(也就是5天前天没访问的文件)
find /tmp -atime -5      //表示查找在五天内访问过的文件


ps:在清理日志的时候,一般使用的是——最近一次内容修改的时间


find -mtime +30 -name "*[0-9]*" -exec rm {} \;


(6)根据文件类型来查找文件 -type


f // 普通文件
d //目录文件
l //链接文件
b //块设备文件
c //字符设备文件
p //管道文件
s //socket文件


find /tmp -type s


(7)根据大小来查找文件 -size


find /tmp -size 2M       //查找在/tmp 目录下等于2M的文件
find /tmp -size +2M      //查找在/tmp 目录下大于2M的文件
find /tmp -size -2M      //查找在/tmp 目录下小于2M的文件


(8)根据文件权限查找文件 -perm


find /tmp -perm 755      //查找在/tmp目录下权限是755的文件
find /tmp -perm +222     //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
find /tmp -perm -222     //表示必须所有类别用户都满足有写权限


(9)-nouser and -nogroup


find / -nogroup –a –nouser    //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)


查找完执行的action


-print //默认情况下的动作
-ls //查找到后用ls 显示出来
-ok [commend] //查找后执行命令的时候询问用户是否要执行
-exec [commend] //查找后执行命令的时候不询问用户,直接执行


find /tmp -name "*.sh" -exec chmod u+x {} \;


这里要注意{}的使用:替代查找到的文件


find /tmp "*.sh" -exec cp {} {}.old \;


删除查找到的超过30天没有访问过文件


find  /tmp  -atime  +30  –exec rm –rf  {}  \;


也可以使用xargs来对查找到的文件进一步操作


find /tmp -name "*.old" | xargs chmod 700


案例详细说明


  • 删除文件命令


find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;


  • 实例命令


find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;


  • 说明


将 /opt/soft/log/ 目录下所有30天前带".log"的文件删除。具体参数说明如下:


  1. find linux的查找命令,用户查找指定条件的文件;
  2. /opt/soft/log/:想要进行清理的任意目录;
  3. -mtime:标准语句写法;
  4. +30:查找30天前的文件,这里用数字代表天数;
  5. "*.log":希望查找的文件名正则表达式,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
  6. -exec:固定写法;
  7. rm -rf:强制删除文件,包括目录;
  8. {} ; :固定写法,一对大括号+空格+\+;



相关文章
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
413 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
289 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
666 57
|
1月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
379 2
|
2月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
264 0
Linux内存问题排查命令详解
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
|
安全 网络协议 Linux
【专栏】Linux系统中ping命令的使用,包括其基本语法、输出信息、常用参数及高级用法
【4月更文挑战第28天】本文详细介绍了Linux系统中ping命令的使用,包括其基本语法、输出信息、常用参数及高级用法。通过ping,用户可测试网络连通性、诊断故障及评估性能。此外,文章还讨论了ping在不同协议、模拟网络环境及与其他命令结合使用时的场景。注意防火墙和网络环境可能影响ping结果,理解错误信息有助于网络问题排查。熟练掌握ping命令,能助你成为Linux网络专家。不断学习和实践,提升网络技能,为构建稳定网络环境贡献力量。
1081 0
|
Shell Linux Perl
65Linux - RPM 命令参数使用详解
65Linux - RPM 命令参数使用详解
208 1