【存】008 Linux 文件查找 find
01 一起来认识 find!
在 Linux 系统,find 毫无疑问是最强的文件查找工具。find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除、统计、复制迁移等操作。
02 find 文件名、类型查找过滤
- find / -name 'hello.txt' #从根目录下开始查找文件 hello.txt;
- find . -iname 'hello.txt' #从当前目录下开始查找文件 hello.txt,-iname 会忽略大小写;
- find . -name '*hello.txt' #当前目录下,查找目标名称后缀为 "hello.txt" 的文件;
- find / -type f -size +500M #从根目录开始查找,500M以上文件;-type f: f为普通文件类型,f 改为 d 则是目录文件,l 则是符号链接文件,-type 还有其他参数;-size +500M :500MB以上 。一般磁盘空间不够,删除垃圾文件时会使用到此命令;
- find . -type f -size +1k #查找当前文件夹下超过1k的文件,注意k是小写;
- find /etc ! -type f #查找 /etc 目录下不是普通文件的文件,"!":感叹号,取反;
03 find 时间范围查找过滤
find . {-atime/-ctime/-mtime/-amin/-cmin/-mmin} [-/+]num #使用基本格式
- 第一个参数,'.' 代表当前目录,如果是其他目录,可以输入绝对目录和相对目录位置;
- 第二个参数分两部分,前面字母a、c、m分别代表访问、变更、修改,后面time为日期,min为分钟,注意只能以这两个作为单位;
- 第三个参数为量,其中不带符号表示符合该数量的,带-表示符合该数量以后的,带+表示符合该数量以前的。
参数说明:
- atime:访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间;
- ctime:变更时间(change time),指的是文件本身最后被变更的时间,变更动作可以使chmod、chgrp、mv等等;
- mtime:修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
一些使用示例:
- find . -type f -mtime -30 #查找当前目录下30天之内修改过的文件;
- find /var/log/ -mtime +30 -name '*.log' # 查找指定目录/var/log/ 下30天以前被修改的log类型文件;
- find /etc -maxdepth 1 ! -type l -mtime -30 #查找/etc 第一层目录下不是符号链接文件的文件,并在30天内被修改过,-maxdepth :指定目录层级,-maxdepth 1代表第1层,-maxdepth 2代表延伸到第二层;
04 find 组合命令删除文件的三种方法
【场景案例】
用wc -l来统计下log数量,再进行删除。
find . -name '*.log' -mtime +30 | wc -l #从当前目录下开始搜索30天之前的log文件,并统计数量, "|": 管道符,将前面查到的数据作为输入源给后面的命令;
【第一种删除方式:-exec】
find . -name '*.log' -mtime +30 -exec rm {} ; #查找当前目录下30天以前的log文件,使用-exec加rm将其删除;exec命令以分号结束';',该分号前面要放反斜杠转义 。
【第二种删除方式:-ok】
find . -name '*.log' -mtime +30 -ok rm {} ; #查找当前目录下30天以前的log文件,-ok : 询问删除,y删除,n不删除,回车默认不删除;命令以分号结束';', 该分号前面要放反斜杠转义 。
【第三种删除方式:xargs】
find . -name '*.log' -mtime +30 -print0 | xargs -0 rm -f # xargs : 命令传递参数过滤器,与管道符 "|" 一同使用,将前面的命令传递给后面的命令使用;
05 find 与xargs 组合使用
- xargs 识别字符段的标识是空格或者换行符,若一个文件名里有空格或者换行符,xargs 就会把它识别成两个字符串,就会出错。这时就需要-print0和-0。
- find -print0 表示在 find 的每一个结果之后加一个NULL字符,而不是默认加一个换行符。find 的默认在每一个结果后加一个 '\n',所以输出结果是一行一行的。当使用了-print0之后,就变成一行了。
- xargs -0 表示 xargs 用 NULL 来作为分隔符。这样前后搭配就不会出现空格和换行符的错误。NULL做分隔符,是因为一般编程语言把NULL作为字符串结束的标志,所以文件名不可能以NULL结尾。
使用案例:
- find . -name '*.log' -mtime +10 -print0 | xargs -0 rm -f #保险的方式删除,推荐这样使用
- find / -name '*.log' -mtime +30 | xargs ls -l #对于30天前的log文件进行详情查看,利用xargs + ls -l 命令来进行文件的详细属性查看;
- find / -name '*.log' -mtime +30 | xargs -i mv {} /logback #将30天前的所有log文件移动到 /logback 文件夹下,xargs -i + {},将前面查找到的文件都作为参数给mv命令执行;
06 find下xargs与-exec的区别
区别一:
- -exec,是将查找到的结果文件名逐个传递给后面的命令执行,文件多会导致效率低;
- xargs,则是一次性传递,效率较高,并可使用-n参数控制传递文件个数。
区别二:
- -exec,文件名有空格等特殊字符也照常处理;
- xargs,处理特殊的文件名(例如文件名有空格)需要采用特殊的处理方式(find . -name "*.log" -print0| xargs -0 ls -l)。
07 一个常用实践组合命令
【场景】
查找超过500M大小文件,并显示查找出来文件的具体大小,且按照大小排序。
【命令示例】
- find . -type f -size +500M -print0 | xargs -0 du -h | sort -nr
- find . -name '*.log' -size +500M -print0 | xargs -0 du -h | sort -nr
08 小结
find 命令是查找文件神器,可按文件名、类型查找过滤;按时间范围查找过滤;同时组合其他命令使用,可大大提高操作效率。
「不甩锅的码农」原创,转载请注明来源,未经授权禁止商业用途!同名 GZH 请关注!
【存】008 Linux 文件查找 find的更多相关文章
- Linux文件查找.md
Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...
- Linux文件查找命令find用法整理(locate/find)
Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...
- linux文件查找find命令
linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find [option ...
- linux 文件查找,which,whereis,locate,find
linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...
- Linux文件查找命令find,xargs详述【转】
转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...
- Linux文件查找
Linux下查找文件的命令有两个; locate: find : locate这个命令对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了查 找文件速度很快,但是locate ...
- Linux文件查找工具之find “大宝剑”--转载
原文地址:http://xinzong.blog.51cto.com/10018904/1749465 一.文件查找工具常用软件 locate: locate命令其实是find -name的另一种写法 ...
- linux - 文件查找及压缩
文件查找: 1. which 查找可以执行文件,只搜索$PATH里的目录 $ which ls /bin/ls which只搜索$PATH里的目录,如果搜索当前目录的文件是没有任何结果的 $ ...
- Linux 文件查找
在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 whereis wher ...
随机推荐
- 【九度OJ】题目1174:查找第K小数 解题报告
[九度OJ]题目1174:查找第K小数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1174 题目描述: 查找一个数组的第 ...
- python学习第六天:python基础(dict、set)
dict dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 创建&取值 为什么dict查找速度这么快? 因为 ...
- VAE with a VampPrior
目录 概 主要内容 分级的VAE 代码 Tomczak J. & Welling M. VAE with a VampPrior. In International Conference on ...
- Deep Residual Learning for Image Recognition (ResNet)
目录 主要内容 代码 He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]. computer vi ...
- ORW-测信道攻击
做SCTF时碰到一个没看过的题型,比赛结束之后才知道是orw的一个玩法,测信道攻击.主要特点就是只给使用open,read,但是不给write,即无法把flag输出到终端.这里可以通过把flag读到栈 ...
- 【优雅代码】02-java传个方法你会吗,不是Method对象
[优雅代码]02-java传个方法你会吗,不是Method对象 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮 ...
- Spring练习,使用注解的方式,完成模拟用户的正常登录。要求如下: 使用注解方式开发模拟用户的正常登录。
相关 知识 >>> 相关 练习 >>> 实现要求: 在该实践案例中,使用注解的方式,完成模拟用户的正常登录. 要求如下: 使用注解方式开发模拟用户的正常登录. 实现 ...
- Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Java 类 Point 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台. 实现思路: 定义 P ...
- JavaScript交互式网页设计笔记 • 【目录】
章节 内容 实践练习 JavaScript交互式网页设计作业目录(作业笔记) 第1章 JavaScript交互式网页设计笔记 • [第1章 JavaScript基本语法] 第2章 JavaScript ...
- ClickHouse在监控系统中的应用
一.背景 这个项目是一个监控系统,主要监控主机.网络设备.应用等.主机监控的数量有1500台左右,数量还在不断增长,加上网络设备和应用,目前总共监控的指标达到近40万个. 二.问题 一开始为了快速交付 ...