查找文件工具find
与locate、whereis命令相比,find具有本质的区别:
首先,find是从指定的位置进行遍历查找(可以理解为对文件和目录进行逐一查找)。
其次,find可以查找具有某一类特征的文件(例如查找具有某个权限特征的文件等),非常适合于批量处理具有某一类特征的文件。
一、find基本格式
命令格式:
find [path] [expression]
参数解析:
path:find查找路径。如果未指定,则默认为当前工作目录。
expression:用于定义find查找的表达式,表达式通常由选项、测试和动作3类参数组成。
(1)选项用于指定find查找的目录、帮助等信息,常用的选项及其含义如下:
help:获得find命令的帮助信息。
depth:先从当前目录中查找,然后再从当前目录的子目录中查找。
maxdepth LEVELS:向下搜索到第LEVELS层目录,当LEVELS=0时表示只在当前目录查找。
mindepth LEVELS:至少向下搜索LEVELS层目录。
mount:不搜索远程文件系统
follow:搜索如果遇到连接文件时就连同连接文件所指向的文件一并检查。
(2)测试参数是一些使得输出更加详细的参数,常用的测试参数及含义:
name:按文件名查找。
perm:按文件权限查找。
type:查找某一类型的文件。
mtime +n-n:按文件的修改时间查找,+n表示修改时间距现在n天以前,-n表示修改时间距现在n天以内。
atime +n-n:按文件的访问时间查找文件。
size n [c]:查找文件长度为n块的文件,c表示文件大小为n字节的文件。
user:按文件属主查找。
group:按文件属组查找。
nouser:查找没有有效属主的文件(文件在/etc/passwd文件中不存在)
nogroup:查找没有有效属组的文件(文件在/etc/group文件中不存在)
(3)动作参数指定find命令如何查找和处理找到的文件,常用的动作有如下4种:
prune:不在指定目录中查找。
print:将查找到的文件输出到标准输出。
exec:对查找到的文件执行exec动作后面附带的shell命令。
ok:对查找到的文件执行ok动作后面附带的shell命令,在每次执行前将提示用户是否执行。
find有许多参数,大多数情况下,使用该命令都至少要包含一个测试和一个动作,才能完成整个查找任务。
二、用法示例分类讲解
1、按文件名称查找
(1)在/etc目录下查找Samba服务的配置文件smb.conf:
[root@localhost zhu]# find /etc -name "smb.conf" -print
/etc/samba/smb.conf
(2)查找/etc目录下所有的配置文件:
[root@localhost zhu]# find /etc -name "*.conf" -print
/etc/sestatus.conf
/etc/updatedb.conf
/etc/cups/snmp.conf
/etc/cups/pdftops.conf
/etc/cups/printers.conf
/etc/cups/classes.conf
/etc/cups/cupsd.conf
/etc/cups/client.conf
...
(3)在当前目录下查找名为messages的文件:
[root@localhost zhu]# find -name "messages" -print
(4)在一个很大的文件系统上进行查找时,可能会花费很长时间,通常建议使用操作符&将find命令放到后台执行:
[root@localhost zhu]# find / -name "*.conf" &>tmp.txt &
2、按文件权限查找
使用perm参数可以按照文件的权限进行查找,使用此参数时,需要使用八进制表示权限。按权限查找文件通常用在多用户系统中,以便于发现可能导致泄密、不安全的内容等。
提示:使用八进制表示权限的方法称为绝对模式,绝对模式使用数字4表示读权限,2表示写权限,1表示执行权限,使用多权限时只需将数值相加即可。使用3位数字表示多用户权限,从左起分别表示属主(u)、属组(g)和其他用户(o)权限。
(1)在整个文件系统上查找属主可以读、写,属组可以读、写,其他用户可以读的文件:
[root@localhost zhu]# find / -perm 664 -print
(2)在当前目录的file子目录下查找其他用户可以读、写、执行的文件(这种情况应该引起重视),此时应该在权限数值前面加一个横杠“-”(“-”表示包含模式):
[root@localhost zhu]# find -perm -007 -print
上述命令将输出其他用户可读、写、执行的所有文件,属主和属组的访问权限将被find忽略。
3、按文件类型查找
(1)查找/dev目录下有哪些字符设备:
[root@localhost zhu]# find /dev -type c -print
/dev/vcsa7
/dev/vcs7
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
...
此时find列出了/dev目录下所有的字符设备,其中包括光驱、终端和控制台等。
(2)查找目录/dev目录下有哪些块设备文件:
[root@localhost zhu]# find /dev -type b -print
/dev/md0
/dev/fd0u800
/dev/fd0u1120
/dev/fd0u1040
此时find列出了/dev目录下所有的块设备文件,包括磁盘、软驱、阵列等。
(3)查找/etc/rc3.d中除了链接文件以外的文件(通常情况下这个目录下只会存放链接文件):
#其中l表示链接文件,感叹号!表示否定
[root@localhost zhu]# find /etc/rc3.d ! -type l -print
提示:参数type使用的文件标识除普通文件使用f作为标识外,其他标识都与ls命令的长格式中的文件类型标识一致,例如字母d表示目录,l表示链接文件等。
4、按文件的时间戳和大小查找
(1)按时间戳记查找文件:
按文件的时间戳记进行查找时,可以使用+n限定在n天以前,使用-n限定时间在n天以内。虽然可以使用n精确限定时间,但一般不这样使用,原因是系统计算时间是以秒为单位的,因此一般情况下该选项无法得到任何有用的结果。
- 希望在整个文件系统上查找修改时间在一周以内的文件:
[root@localhost zhu]# find / -mtime -7 -print
- 查找用户根目录下修改时间在1天以前的文件:
[root@localhost zhu]# find ~ -mtime +1 -print
- 查找目录/data中访问时间在10天以内的文件:
[root@localhost zhu]# find /data -atime -10 -print
(2)按文件长度查找
使用size按文件大小查找时,可以像时间戳记那样使用+n标识文件长度大于n的文件,-n表示文件长度小于n的文件。默认情况下文件长度的单位是块(一块等于512字节),如果要以字节来计算文件长度,应该在数字后加小写字母c。
- 在当前目录下查找文件长度大于10MB的文件:
[root@localhost zhu]# find . -size +10000000c -print
- 在当前目录下查找文件长度小于30块的文件:
[root@localhost zhu]# find . -size -30 –print
在按文件大小查找时,也可以使用KB(千字节)、MB(兆字节)、GB(吉字节)等较大的单位标志文件的大小。
5、按文件属主和属组查找
当管理员将一个用户或用户组从系统中删除时,可能需要将该用户或用户组的文件收集起来保存一段时间。这时可以使用find命令的user、nouser、group和nogroup这几个参数,查找指定的用户、用户组的文件。
(1)查找目录/home中属主为zhu的文件:
[root@localhost zhu]# find /home -user zhu -print
/home/zhu
/home/zhu/.bashrc
/home/zhu/.bash_history
/home/zhu/.bash_logout
/home/zhu/.bash_profile
(2)在整个文件系统上查找出没有有效属主(即用户名在系统用户名/etc/passwd中不存在)的文件:
[root@localhost zhu]# find / -nouser -print
(3)查找目录/file中属组为admin的文件:
[root@localhost zhu]# find /file -group zhu -print
(4)在整个文件系统中查找没有有效属组(即用户组名称在系统组文件/etc/group中不存在)的文件:
[root@localhost zhu]# find / -nogroup –print
6、find工具的其他参数
(1)忽略目录参数prune
在查找文件的时候,可能不需要查找某个目录,或用户已经知道某个目录不存在这个文件,这时就可以用prune参数忽略这些目录。
例如要从除了/etc以外的整个文件系统上查找以.conf结尾的文件:
[root@localhost zhu]# find / -path "/etc" -prune -o -name "*.conf" –print
上面的示例中,使用参数o将两个不同的参数连接起来。
(2)忽略远程文件系统参数mount
在整个文件系统上查找文件时,如果系统上挂载有远程文件系统,搜索远程文件系统不仅要耗费大量网络资源,还要花费大量时间。这时可以使用mount参数忽略挂载的远程文件系统。
例如要在本地文件系统上查找一个名为file的文件:
[root@localhost zhu]# find / -name "file" -mount –print
注意:使用prune参数查找文件时,如果同时使用了depth参数,find会将prune参数忽略。
7、使用exec和ok处理查找到的文件
使用exec、ok参数执行shell命令的格式如下:
-exec [shell-command] {} \;
-ok [shell-command] {} \;
在上面的格式中,参数exec、ok后面空一格,紧跟着要执行的shell命令,再空一格,后面是一个大括号“{}”,再空一格,最后加上一个反斜杠“\”和一个分号“;”。
(1)查找当前目录中,修改时间距离现在一周以前、以message开头的文件,并用ls命令查看:
[root@localhost zhu]# find . -name "message*" -mtime +7 -exec ls -l {} \;
(2)查找并删除两周以内的备份文件:
[root@localhost zhu]# find ./backup_sys -name "message*" -mtime +14 -exec rm {} \;
(3)如果要在执行shell命令时获得命令执行的提示,可以使用ok参数。例如删除两周以前的备份文件并在执行前获得提示:
[root@localhost zhu]# find ./backup_sys -name "message*" -mtime +14 -ok rm {} \;
8、使用xargs命令处理查找到的文件
利用exec和ok参数处理查找到的文件时,存在一些缺陷,这些缺陷如下:
- 系统对参数exec、ok传递给shell命令的文件列表长度有一定的限制。当find命令查找到的文件数量很多时,会出现参数列表溢出错误。
- 参数find命令找到的每一个文件发起一个相应的处理进程,当find命令查找到的文件数量很多时,可能会影响整个系统性能。
xargs命令的作用是构造一个参数列表并交给命令执行。与参数exec、ok相比,xargs不会一次获取并处理find找到的所有文件,而是每次只获取并处理其中的一部分。处理完后再获取下一部分,直至结束。整个过程xargs都只发起一个处理进程,对系统性能的影响很小。
使用xargs命令分割参数列表时,需要借助于管道。例如查找当前目录backup_sys子目录中,修改时间距现在两周以前的所有文件并删除:
[root@localhost zhu]# find ./backup_sys -name "message*" -mtime +14 -print | xargs rm
查找文件工具find的更多相关文章
- [转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...
- centos 基本操作(输入法安装,adls宽带连接,查找文件,模拟终端)
centos 基本操作之输入法安装输入法启动终端,切换到超级管理员yum install "@Chinese Support"安装成功后,退出System->Preferen ...
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
Windows下有软件FindDupFile,可以搜索指定目录及其下子目录,列出所有内容完全相同的文件(文件名可能不同),然后由用户选择删除重复的文件. 然而shell脚本却可以使用几行的命令完成与此 ...
- 使用find命令查找文件
find命令用法 语法: find (选项) (参数) 常用选项: -exec<执行命令>: 假设find指令的回传值为True,就执行该指令; -ls: 假设find指令的回传值为Tru ...
- 如何使用find命令在Linux中查找文件
Linux Find命令是Linux系统管理员工具库中最强大的工具之一. Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作 ...
- 在Team Foundation Server (TFS)的代码库或配置库中查找文件或代码
[update 2017.2.11] 最新版本的TFS 2017已经增加了代码搜索功能,可以参考这个链接 https://blogs.msdn.microsoft.com/visualstudioal ...
- 查找文本工具grep
许多时候需要从一大堆的命令输出或文本内容中找出一两行关键的内容,例如从系统用户文件中查找某个用户.如果不借助工具,这将是一项非常繁琐的工作,这时可以使用grep工具对内容进行筛选. grep(glob ...
- 查找文件which locate find
(1)which:查找命令文件路径 which ls //命令的路径查找是根据PATH环境变量 whereis ls echo $PATH //打印PATH环境变量 (2)locate:查找任意文件 ...
- find命令的基础用法以及按文件修改时间查找文件
一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...
随机推荐
- Redis学习篇(二)之Hash类型及其操作
HSET 作用: 将哈希表key中的域field设置成指定的value 语法:HSET key field value HSET userinfo name 'zhangsan' HSET useri ...
- CUDA学习笔记4:CUDA(英伟达显卡统一计算架构)代码运行时间测试
CUDA内核运行时间的测量函数 cudaEvent_t start1; cudaEventCreate(&start1); cudaEvent_t stop1; cudaEventCreate ...
- [BZOJ3583]杰杰的女性朋友(矩阵快速幂)
杰杰的女性朋友 时间限制:10s 空间限制:256MB 题目描述 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几 ...
- SpringBoot 整合 WebSocket
SpringBoot 整合 WebSocket(topic广播) 1.什么是WebSocket WebSocket为游览器和服务器提供了双工异步通信的功能,即游览器可以向服务器发送消息,服务器也可以向 ...
- Dubbo整合SpringCloud图片显示问题
Dubbo整合SpringCloud图片显示问题 Tips:公司项目,记录一点经验吧,理解的不对的地方欢迎大神指点 问题:商品图片上传功能(公司没有专门文件服务器)写的保存目录直接是保存在docker ...
- Educational Codeforces Round 11 B. Seating On Bus 水题
B. Seating On Bus 题目连接: http://www.codeforces.com/contest/660/problem/B Description Consider 2n rows ...
- Unity UGUI之Text
下图是Text组件的内容. Character(字符) Text--输入要显示的文本 Font--要渲染文本的字体类型(例如:黑体.宋体) FontStyle--是否要加粗,倾斜等. Normal-- ...
- 使用Keras实现机器翻译(英语—>法语)
import numpy as np from keras.models import Model from keras.models import load_model from keras.lay ...
- Android 动画——Layout Animations布局动画
Layout Animations主要使用LayoutTransition为布局的容器设置动画,当容器中的视图层次发生变化时存在过渡的动画效果. LayoutTransition This class ...
- VS2010安装HTML5插件
步骤: 1. 下载 插件 2.拷贝文件里面德尔html_5.xsd到 D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packa ...