linux之find的使用
基本语法
find [查找目录] [选项] [查找规则] [查找完后的操作] 即:find pathname -option -condition [-print -exec -ok …]
选项参数
- -amin # 查找在系统中最后N分钟访问的文件
- -anewer<参考文件或目录>: 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
- -atime -n +n #按文件访问时间来查GIN: 0px">
- -cmin<分钟>: 查找在指定时间之时被更改过的文件或目录;
- -cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
- -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
- -daystart: 从本日开始计算时间;
- -depth: 从指定目录下最深层的子目录开始查找;
- -expty: 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
- -exec<执行指令>: 假设find指令的回传值为True,就执行该指令;
- -false: 将find指令的回传值皆设为False;
- -fls<列表文件>: 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
- -follow: #如果遇到符号链接文件,就跟踪链接所指的文件
- -fprint<列表文件>: 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
- -fprint0<列表文件>: 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
- -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
- -fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
- -gid<群组识别码>: 查找符合指定之群组识别码的文件或目录;
- -group<群组名称>: 查找符合指定之群组名称的文件或目录;
- -help或——help: 在线帮助;
- -ilname<范本样式>: 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
- -iname<范本样式>: 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
- -inum: 查找符合指定的inode编号的文件或目录;
- -ipath<范本样式>: 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
- -iregex<范本样式>: 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
- -links<连接数目>: 查找符合指定的硬连接数目的文件或目录;
- -iname<范本样式>: 指定字符串作为寻找符号连接的范本样式;
- -ls: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
- -maxdepth<目录层级>: 设置最大目录层级;
- -mindepth<目录层级>: 设置最小目录层级;
- -mmin # 查找在系统中最后N分钟里修改过的文件
- -mount: #查文件时不跨越文件系统mount点,此参数的效果和指定“-xdev”相同;
- -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
- -name<范本样式>: 指定字符串作为寻找文件或目录的范本样式;
- -newer f1 !f2 #查更改时间比f1新但比f2旧的文件
- -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
- -noleaf: 不去考虑目录至少需拥有两个硬连接存在;
- -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
- -ok<执行指令>: 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
- -path<范本样式>: 指定字符串作为寻找目录的范本样式;
- -perm<权限数值>: 查找符合指定的权限数值的文件或目录;
- -print: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
- -print0: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
- -printf<输出格式>: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
- -prune: #忽略某个目录
- -regex<范本样式>: 指定字符串作为寻找文件或目录的范本样式;
- -size n[c] #查长度为n块[或n字节]的文件
- -true: 将find指令的回传值皆设为True;
- --type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
- -uid<用户识别码>: 查找符合指定的用户识别码的文件或目录;
- -used<日数>: 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
- -user<拥有者名称>: 查找符和指定的拥有者名称的文件或目录;
- -version或——version: 显示版本信息;
- -xdev: 将范围局限在先行的文件系统中;
- -xtype<文件类型>: 此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
后续操作
-exec:对匹配的文件执行该参数所给出的shell命令,形式为:command {} \,({}和\,之间有空格)。
-ok:与exec作用相同,区别是在执行命令之前,都会给用户提示,让用户确认是否执行
注意:
1)”{}”和”\”之间有一个空格。
2)-ok:和-exec的作用相同,只不过-ok更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行。
逻辑运算
- -a:and逻辑与。find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。
- -o:or逻辑或。就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。
- -not:not逻辑非。就是取反的意思。
基本使用
根据文件名查找
- 在根目录下查找test开头的文件,文件名区分大小写
命令:find / -name ‘test*.txt’
- 在/var/xiaoming目录下查找test1.txt,test2.txt,test3.txt,文件名区分大小写
命令:find /var/xiaoming -name 'test[123].txt'
- 在/var/xiaoming目录下查找test1.txt,test2.txt,TEST3.txt,Test4.txt,文件名不区分大小写。?表示任意单个字符
命令:find /var/xiaoming -iname 'test?.txt'
根据文件类型查找
-type 为类型参数:
f 表示文件
d 表示目录
c 表示字符设备
b 表示块设备
s 表示套接字
l 表示链接
- 在根目录下查找名为test的文件夹
命令:find / -type d -name 'test'
根据文件大小查找
文件大小参数:
b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节
说明:命令中的'+’,’-’,’=’分别表示大于,小于和等于,注意如果不加符号就表示要找文件的大小必须恰好等于这个值才符合条件
- 在/var/xiaoming目录下查找文件大小在10kb和500kb之间的文件
命令:find /var/xiaoming -type f -size +10k
根据时间查找
UNIX/Linux文件系统每个文件都有三种时间戳:
- 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
- 修改时间(数据修改时间)(-mtime/天,-mmin/分钟):文件最后一次修改时间。
- 变化时间(状态修改时间)(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
注意:“+”:表示多长时间前被操作过的文件;“-”:表示多长时间内被操作过的文件;没有符号表示等于这个时间点被操作过的文件
- 查找根目录下10分钟之前30分钟之内数据被修改过的文件
命令:find / -mmin +10 -mmin -30
- 查找根目录下5天前10天内文件属性修改过的文件
命令:find / -ctime +5 -ctime -10
- 查找根目录下5天内被访问过的文件
命令:find / -type f -atime -5
根据用户/组来查找
选项:
- -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
- -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
- -user 用户名:按照用户名査找所有者是指定用户的文件
- -group 组名:按照组名査找所属组是指定用户组的文件
- -nouser:査找没有所有者的文件
- 查找当前目录下所有的所有者为root的文件
命令:find . -user root
- 查找当前目录下没有所有者的文件
命令:find . -nouser
- 在根目录下查找文件用户组名事root的文件
命令:find ./ -group root
maxdepth和mindepth
-maxdepth n : 搜索深度距离当前目录最多n个子目录深度
-mindepth n :搜索深度距离当前目录至少n个子目录深度
- 搜索出深度距离当前目录至少2个子目录的所有文件
命令:find . -maxdepth 2 -type f
- 搜索出深度距离当前目录至少3个子目录的名称为test1.txt的文件
命令:find . -mindepth 3 -type f -name 'test2.txt'
查找空目录
- 查找当前目录下空文件
命令:find . -empty
根据权限来查找
选项:
- -perm 权限模式:査找文件权限刚好等于"权限模式"的文件
- -perm -权限模式:査找文件权限全部包含"权限模式"的文件
- -perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件
- 在/var/kuangxiang目录下查找权限为444的文件
命令:find /var/kuangxiang -type f -perm -444
- 找出当前目录下权限不是644的php文件
命令:find . -type f -name "*.php" ! -perm 644
按照硬连接的数目进行查找
-link n :硬连接连接数等于n的文件或目录 ;-link +n:硬连接连接数大于n的文件或目录;-link -n:硬连接连接数小于n的文件或目录
- 查找根目录下硬连接数为3的文件
命令:find / -link 3
逻辑运算查找
-a:与运算
- 查找当前目录下txt结尾喝php结尾且权限为644的文件
命令:find -type f -name '*.txt' -a -name '*.php' -a -perm 644
-o:或运算
- 查找当前目录下名为test1.txt文件或者名为test2的文件夹
命令:find . -type f -name 'test1.txt' -o -type d -name 'test2'
-not:对条件进行取反
- 查找当前目录下文件大小不等于0的文件
命令:find . -not -size 0
其他操作
- 查找当前目录下的空文件并删除。其中,”{}”就代表查找之后返回的文件,{}和\之间必须有空格,且最后必须有分号。
命令:find . -empty -exec rm -f {} \;
- 查找当前目录下的名称为test1.txt的文件并且展示文件相关属性
命令:find .-name 'test1.txt' -exec ls -l {} \;
- 查找当前所有以 abc 开头并且不含 .php 扩展名的文件
命令:find
.
-name
'abc*'
! -name
'*.php'
- 在/var/xiaoming和/var/zhangsan目录下查询名为test.txt的文件
命令:find /var/xiaoming /var/zhangsan -type f -name 'test.txt'
- 在当前目录下查找隐藏文件、
命令:find . -type f -name ".*"
- 在/etc下查找只读文件
命令:
find
/etc
-maxdepth 1 -perm
/u
=r
- 在/bin目录下查找可执行文件
命令:find
/bin
-maxdepth 2 -perm
/a
=x
- 查找最大和最小的文件
我们可以将 find 命令与 ls 和 sort命令结合,从而找出最大或最小的文件。下面的命令使用了 sort 命令的 -r 选项,也就是从大到小降序排列。经过 head 命令的过滤之后,会显示当前目录和子目录下最大的5个文件。命令的执行过程需要一段时间,查找的速度取决于文件的总数,如下:
命令:find . -type f -exec ls -s {} \; | sort -n -r | head 5
同样,我们可以去掉 sort 命令的 -r 选项来进行升序排列,从而显示出最小的5个文件,如下:
命令:find . -type f -exec ls -s {} \; | sort -n | head 5
- 查找根目录下以log结尾以外的文件
命令:find ./ ! -name "*.log"
- 查找比某文件新或某文件旧的文件
环境上日志文件太多,想删除某个时间之前的文件,该怎么处理?
可以利用以下参数:
- newer 修改时间更新的
- anewer 访问时间更新的
- ctime 修改时间更新的,包括属性的修改
命令:find ./ ! -newer 1.log |xargs ls -al #列出比1.log更旧的文件
find ./ -newer 1.log |xargs ls -al #列出比1.log更新的文件
这里我只是列出,并没有删除,删除可参考前面介绍的删除找到的文件。而如果要查找出比文件1更新,比文件2旧的文件,只需要利用组合条件即可。
find与xargs
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词
find /etc -type f "*.*" | xargs grep "TMOUT" 从etc目录下的任何文件中搜索包含有TMOUT字符的文件
find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西(find . -ctime +3 -exec rm -rf {} \;)
find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
学习链接
linux之find的使用的更多相关文章
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- [linux]阿里云主机的免登陆安全SSH配置与思考
公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- Microsoft Loves Linux
微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...
- Linux 江湖系列阶段性总结
引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...
随机推荐
- XGBoost、LightGBM、Catboost总结
sklearn集成方法 bagging 常见变体(按照样本采样方式的不同划分) Pasting:直接从样本集里随机抽取的到训练样本子集 Bagging:自助采样(有放回的抽样)得到训练子集 Rando ...
- LDAP的filter查询详解
转: 等于(EQUAL TO): =大于等于(Greater than): >=小于等于(Less than): <=通配符(wildcard): * 逻辑运算符:逻辑与(log ...
- 制作A4纸打印的网页像素大小设置(转)
公司内做系统,要用A4纸打印东西,A4纸标准时mm,换算成像素不知道.网上找找,找到一篇文章,转一下,备用. A4纸的尺寸是210mm*297mm,也就是21.0cm*29.7cm,而1英寸=2.54 ...
- OpenJudge计算概论-骑车与走路
/*============================================================ 骑车与走路 总时间限制: 1000ms 内存限制: 65536kB 描述 ...
- CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天
CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天
- openrstry 限流 是否有清零逻辑
openrstry 限流 是否有清零逻辑 https://github.com/openresty/lua-resty-limit-traffic
- VIM快速掌握
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...
- jeecg使用心得
接触到jeecg框架是在去年,接触到了jeecg开源框架,此框架为企业级急速开发框架,不了解的可以百度下这类框架的,对于目前状态来说,此框架确实也满足了所需,此刻就开始接触jeecg框架,去年六七月份 ...
- VS2017调试程序时 无法启动web iis或者提示ID为***的进程未启动
打开项目的.csproj文件,定位到<WebProjectProperties>,把关于IIS的配置<DevelopmentServerPort>.<Developmen ...
- std::function以及std::bind
转自:https://blog.csdn.net/shuilan0066/article/details/82788954 示例1 : 普通函数 void gFunc() { cout << ...