【linux命令讲解大全】011.使用find命令在指定目录下查找文件及应用技巧和选项详情
本文介绍了在Linux系统中使用find命令在指定目录下查找文件的方法和技巧。通过该命令可以根据不同的选项和参数,实现按名称、文件类型、权限等属性进行文件搜索,并可以对搜索结果进行进一步的操作和处理。文章还介绍了常用的技巧和选项,如按时间戳搜索、按文件大小搜索、根据所有权进行搜索等。同时提供了多个实例详细说明了find命令的具体使用方法。最后,还分享了一些高级技巧,如删除Mac系统自动生成的文件、
find
在指定目录下查找文件
补充说明
find
命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
语法
find(选项)(参数)
选项
-amin<分钟>
:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;-anewer<参考文件或目录>
:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;-atime<24小时数>
:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;-cmin<分钟>
:查找在指定时间之时被更改过的文件或目录;-cnewer<参考文件或目录>
:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-ctime<24小时数>
:查找在指定时间之时被更改的文件或目录,单位以24小时计算;-daystart
:从本日开始计算时间;-depth
:从指定目录下最深层的子目录开始查找;-empty
:寻找文件大小为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<连接数目>
:查找符合指定的硬连接数目的文件或目录;-lname<范本样式>
:指定字符串作为寻找符号连接的范本样式;-ls
:假设find
指令的回传值为 True,就将文件或目录名称列出到标准输出;-maxdepth<目录层级>
:设置最大目录层级;-mindepth<目录层级>
:设置最小目录层级;-mmin<分钟>
:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;-mount
:此参数的效果和指定-xdev
相同;-mtime<24小时数>
:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;-name<范本样式>
:指定字符串作为寻找文件或目录的范本样式;-newer<参考文件或目录>
:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-nogroup
:找出不属于本地主机群组识别码的文件或目录;-noleaf
:不去考虑目录至少需拥有两个硬连接存在;-nouser
:找出不属于本地主机用户识别码的文件或目录;-ok<执行指令>
:此参数的效果和指定-exec
类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;-path<范本样式>
:指定字符串作为寻找目录的范本样式;-perm<权限数值>
:查找符合指定的权限数值的文件或目录;-print
:假设find
指令的回传值为 True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;-print0
:假设find
指令的回传值为 True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;-printf<输出格式>
:假设find
指令的回传值为 True,就将文件或目录名称列出到标准输出。格式可以自行指定;-prune
:不寻找字符串作为寻找文件或目录的范本样式;-regex<范本样式>
:指定字符串作为寻找文件或目录的范本样式;-size<文件大小>
:查找符合指定的文件大小的文件;-true
:将find
指令的回传值皆设为 True;-type<文件类型>
:只寻找符合指定的文件类型的文件;-uid<用户识别码>
:查找符合指定的用户识别码的文件或目录;-used<日数>
:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;-user<拥有者名称>
:查找符和指定的拥有者名称的文件或目录;-version
或--version
:显示版本信息;-xdev
:将范围局限在先行的文件系统中;-xtype<文件类型>
:此参数的效果和指定-type
参数类似,差别在于它针对符号连接检查。
参数
起始目录:查找文件的起始目录。
实例
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111"
根据文件或者正则表达式进行匹配
列出当前目录及子目录下所有文件和文件夹
find .
在 /home
目录下查找以 .txt
结尾的文件名
find /home -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以 .txt
和 .pdf
结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)
或
find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件
find /usr/ -path "*local*"
基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
否定参数
找出 /home
下不是以 .txt
结尾的文件
find /home ! -name "*.txt"
根据文件类型进行搜索
find . -type 类型参数
类型参数列表:
f
普通文件l
符号连接d
目录c
字符设备b
块设备s
套接字p
Fifo
基于目录深度搜索
向下最大深度限制为3
find . -maxdepth 3 -type f
搜索出深度距离当前目录至少2个子目录的所有文件
find . -mindepth 2 -type f
根据文件时间戳进行搜索
find . -type f 时间戳
UNIX/Linux 文件系统每个文件都有三种时间戳:
- 访问时间 (
-atime/天,-amin/分钟
):用户最近一次访问时间。 - 修改时间 (
-mtime/天,-mmin/分钟
):文件最后一次修改时间。 - 变化时间 (
-ctime/天,-cmin/分钟
):文件数据元(例如权限等)最后一次修改时间。
搜索最近七天内被访问过的所有文件
find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
搜索超过七天内被访问过的所有文件
find . -type f -atime +7
搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
找出比 file.log
修改时间更长的所有文件
find . -type f -newer file.log
根据文件大小进行匹配
find . -type f -size 文件大小单元
文件大小单元:
b
—— 块(512字节)c
—— 字节w
—— 字(2字节)k
—— 千字节M
—— 兆字节G
—— 吉字节
搜索大于10KB的文件
find . -type f -size +10k
搜索小于10KB的文件
find . -type f -size -10k
搜索等于10KB的文件
find . -type f -size 10k
删除匹配文件
删除当前目录下所有 .txt
文件
find . -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配
当前目录下搜索出权限为777的文件
find . -type f -perm 777
找出当前目录下权限不是644的 php 文件
find . -type f -name "*.php" ! -perm 644
找出当前目录用户 tom
拥有的所有文件
find . -type f -user tom
找出当前目录用户组 sunk
拥有的所有文件
find . -type f -group sunk
借助 -exec
选项与其他命令结合使用
找出当前目录下所有 root
的文件,并把所有权更改为用户 tom
find . -type f -user root -exec chown tom {} \;
上例中,{}
用于与 -exec
选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的 .txt
文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok
和 -exec
行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有 .txt
文件并把他们拼接起来写入到 all.txt
文件中
find . -type f -name "*.txt" -exec cat {} \;> /all.txt
将30天前的 .log
文件移动到 old
目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
找出当前目录下所有 .txt
文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
因为单行命令中 -exec
参数中无法使用多个命令,以下方法可以实现在 -exec
之后接受多条命令
-exec ./text.sh {} \;
搜索但跳过指定的目录
查找当前目录或者子目录下所有 .txt
文件,但是跳过子目录 sk
find . -path "./sk" -prune -o -name "*.txt" -print
⚠️ ./sk
不能写成 ./sk/
,否则没有作用。
忽略两个目录
find . \( -path ./sk -o -path ./st \) -prune -o -name "*.txt" -print
⚠️ 如果写相对路径必须加上./
find 其他技巧收集
要列出所有长度为零的文件
find . -empty
其它实例
find ~ -name '*jpg' # 主目录中找到所有的 jpg 文件。 -name 参数允许你将结果限制为与给定模式匹配的文件。
find ~ -iname '*jpg' # -iname 就像 -name,但是不区分大小写
find ~ ( -iname 'jpeg' -o -iname 'jpg' ) # 一些图片可能是 .jpeg 扩展名。幸运的是,我们可以将模式用“或”(表示为 -o)来组合。
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f # 如果你有一些以 jpg 结尾的目录呢? (为什么你要命名一个 bucketofjpg 而不是 pictures 的目录就超出了本文的范围。)我们使用 -type 参数修改我们的命令来查找文件。
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d # 也许你想找到那些命名奇怪的目录,以便稍后重命名它们
最近拍了很多照片,所以让我们把它缩小到上周更改的文件
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7
你可以根据文件状态更改时间 (ctime)、修改时间 (mtime) 或访问时间 (atime) 来执行时间过滤。 这些是在几天内,所以如果你想要更细粒度的控制,你可以表示为在几分钟内(分别是 cmin、mmin 和 amin)。 除非你确切地知道你想要的时间,否则你可能会在 + (大于)或 - (小于)的后面加上数字。
但也许你不关心你的照片。也许你的磁盘空间不够用,所以你想在 log 目录下找到所有巨大的(让我们定义为“大于 1GB”)文件:
find /var/log -size +1G
或者,也许你想在 `/data` 中找到 `bcotton` 拥有的所有文件:
find /data -owner bcotton
你还可以根据权限查找文件。也许你想在你的主目录中找到对所有人可读的文件,以确保你不会过度分享。
find ~ -perm -o=r
删除 Mac 下自动生成的文件
find ./ -name '__MACOSX' -depth -exec rm -rf {} \;
统计代码行数
find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计,排除空行
从零学 python
【从零学习python 】92.使用Python的requests库发送HTTP请求和处理响应
【从零学习python 】91. 使用装饰器和字典管理请求路径的简洁Web应用
【从零学习python 】93.使用字典管理请求路径
【从零学习python 】89. 使用WSGI搭建简单高效的Web服务器
【从零学习python 】88. WSGI接口详解:实现简单高效的Web开发
【从零学习python 】87. 手动搭建HTTP服务器的Python实现及多线程并发处理
【从零学习python 】86. 深入了解HTTP协议及其在浏览器和服务器通信中的作用
【从零学习python 】85.Python进程池的并行计算技术应用
【从零学习python 】84.深入理解线程和进程
【从零学习python 】83. Python多进程编程与进程池的使用
【从零学习python 】82. 基于多线程的聊天程序实现
【从零学习python 】81.Python多线程通信与队列的应用
【从零学习python 】80.线程访问全局变量与线程安全问题
【从零学习python 】79. 线程访问全局变量与线程安全问题
【从零学习python 】78. 文件下载案例
【从零学习python 】77. TCP服务端编程及注意事项
【从零学习python 】76.服务器与客户端:网络通信的关键组成部分
【从零学习python 】75. TCP协议:可靠的面向连接的传输层通信协议
【从零学习python 】74. UDP网络程序:端口问题与绑定信息详解
【从零学习python 】73. UDP网络程序-发送数据
【从零学习python 】72. 深入理解Socket通信及创建套接字的方法
【从零学习python 】71. 网络端口及其作用
【从零学习python 】70.网络通信方式及其应用:从直接通信到路由器连接多个网络
【从零学习python 】69. 网络通信及IP地址分类解析
【从零学习python 】68. Python正则表达式中的贪婪和非贪婪模式
【从零学习python 】67.Python中的re模块:正则替换与高级匹配技术
【从零学习python 】66.深入了解正则表达式:模式匹配与文本处理的利器
【从零学习python 】65. Python正则表达式修饰符及其应用详解
【从零学习python 】64. Python正则表达式中re.compile方法的使用详解
【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍
【从零学习python 】62. Python正则表达式:强大的字符串匹配工具
【从零学习python 】61.Python中的property属性详解和应用示例
【从零学习python 】60.探索生成器:迭代的灵活利器
【从零学习python 】59.迭代器:优化数据遍历的高效工具
【从零学习python 】58.Python中的自定义异常及引发异常的方法
【从零学习python 】57.Python中使用with关键字正确关闭资源
【从零学习python 】56. 异常处理在程序设计中的重要性与应用
【从零学习python 】55.Python中的序列化和反序列化,JSON与pickle模块的应用
【从零学习python 】54. 内存中写入数据
【从零学习python 】53. CSV文件和Python的CSV模块
【从零学习python 】52.文件的读写 - Python文件操作指南
【从零学习python 】51.文件的打开与关闭及其在Python中的应用
【从零学习python 】49. Python中对象相关的内置函数及其用法
【从零学习python 】48.Python中的继承与多继承详解
【从零学习python 】47. 面向对象编程中的继承概念及基本使用
【从零学习python 】46. Python中的__new__和__init__方法解析及单例设计模式
【从零学习python 】45.Python中的类方法和静态方法
【从零学习python 】44.面向对象编程中的私有属性和方法
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】42.Python中的内置属性和方法
【从零学习python 】41.python魔法方法(二)
【从零学习python 】40.python魔法方法(一)
【从零学习python 】39.面向对象基本语法及应用示例
【从零学习python 】38.Python包的使用及导入方式
【从零学习python 】37.Python自定义模块的使用和注意事项
【从零学习python 】36.Python中使用pip进行第三方包管理的方法与技巧
【从零学习python 】35. Python常见系统模块及其用法
【从零学习python 】34.Python模块的导入和使用方法详解
【从零学习python 】33.装饰器的作用(二)
【从零学习python 】32.装饰器的作用(一)
【从零学习python 】31.深入理解Python中的高阶函数和闭包
【从零学习python 】30.深入理解递归函数和匿名函数
【从零学习python 】29. 「函数参数详解」——了解Python函数参数的不同用法
【从零学习python 】28. Python中的局部变量和全局变量
【从零学习python 】27. Python 函数的使用及嵌套调用
【从零学习python 】25.函数:提高代码编写效率的利器
【从零学习python 】24. Python中的字符串操作与遍历方法
【从零学习python 】23. Python中集合(set)的使用方法和常见操作
【从零学习python 】22. Python中的字典的增删改查及字典的变量
【从零学习python 】21.Python中的元组与字典
【从零学习python 】20. Python列表操作技巧及实例
【从零学习python 】19. 循环遍历列表和列表嵌套的应用
【从零学习python 】18. Python列表的基本操作详解(一)
【从零学习python 】17. Python字符串的format方法(二)
【从零学习python 】16. Python字符串的format方法(一)
【从零学习python 】15.深入了解字符串及字符集编码
【从零学习python 】14.Python字符串常见操作(二)
【从零学习python 】13.Python字符串常见操作(一)
【从零学习python 】12.Python字符串操作与应用
【从零学习python 】11.Python循环语句和控制流程
【从零学习python 】10.Python条件语句和if嵌套详解
【从零学习python 】09.Python 中的条件判断语句
【从零学习python 】08.Python了解位运算符, 运算符优先级
【从零学习python 】07.Python运算符详解:赋值、比较和逻辑运算符
【从零学习python 】06. Python中运用算数运算符进行计算和字符串拼接
【从零学习python 】05. Python中的输出和输入
【从零学习python 】04. Python编程基础:变量、数据类型与标识符
【从零学习python 】03. Python交互式编程及注释详解
【从零学习python 】02. 开发工具介绍
【从零学习python 】01. 安装配置python
更多推荐
所有评论(0)