find命令 – 根据路径和条件搜索指定文件

find命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。

find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。

语法格式:find [路径] [参数]

常用参数

-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}; 后面可跟用于进一步处理搜索结果的命令

参考实例

全盘搜索系统中所有以.conf结尾的文件:

[root@jiloc ~]# find / -name *.conf 
/run/tmpfiles.d/kmod.conf 
/etc/resolv.conf 
/etc/dnf/dnf.conf 
/etc/dnf/plugins/copr.conf 
/etc/dnf/plugins/debuginfo-install.conf 
/etc/dnf/plugins/product-id.conf 
/etc/dnf/plugins/subscription-manager.conf ………………省略部分输出信息……………… 

在/etc目录中搜索所有大于1M大小的文件:

[root@jiloc ~]# find /etc -size +1M /etc/selinux/targeted/policy/policy.31 /etc/udev/hwdb.bin 

在/home目录中搜索所有属于指定用户的文件:

[root@jiloc ~]# find /home -user linuxprobe 
/home/linuxprobe 
/home/linuxprobe/.mozilla 
/home/linuxprobe/.mozilla/extensions 
/home/linuxprobe/.mozilla/plugins 
/home/linuxprobe/.bash_logout 
/home/linuxprobe/.bash_profile 
/home/linuxprobe/.bashrc 

列出当前工作目录中的所有文件、目录以及子文件信息:

[root@jiloc ~]# find . 
. 
./.bash_logout 
./.bash_profile 
./.bashrc 
./.cshrc 
./.tcshrc 
./anaconda-ks.cfg ………………省略部分输出信息……………… 

在/var/log目录下搜索所有指定后缀的文件,后缀不需要大小写。

[root@jiloc ~]# find /var/log -iname "*.log" /var/log/audit/audit.log /var/log/rhsm/rhsmcertd.log 
/var/log/rhsm/rhsm.log 
/var/log/sssd/sssd.log 
/var/log/sssd/sssd_implicit_files.log 
/var/log/sssd/sssd_nss.log 
/var/log/sssd/sssd_kcm.log 
/var/log/tuned/tuned.log 
/var/log/anaconda/anaconda.log 
/var/log/anaconda/X.log ………………省略部分输出信息………………

在/var/log目录下搜索所有后缀不是.log的文件:

[root@jiloc ~]# find /var/log ! -name "*.log" 
/var/log /var/log/lastlog 
/var/log/README /var/log/private 
/var/log/wtmp 
/var/log/btmp 
/var/log/samba 

搜索当前工作目录中的所有近7天被修改过的文件:

[root@jiloc ~]# find . -mtime +7 
./.bash_logout 
./.bash_profile 
./.bashrc 
./.cshrc 
./.tcshrc ………………省略部分输出信息………………

全盘搜索系统中所有类型为目录,且权限为1777的目录文件:

[root@jiloc ~]# find / -type d -perm 1777 
/dev/mqueue 
/dev/shm 
/var/tmp 
/tmp ………………省略部分输出信息………………

全盘搜索系统中所有类型为普通文件,且可以执行的文件信息:

[root@jiloc ~]# find / -type f -perm /a=x  
/boot/vmlinuz-4.18.0-80.el8.x86_64 
/boot/vmlinuz-0-rescue-c8b04558503242459d908c6c22a2d481 /etc/X11/xinit/xinitrc.d/50-systemd-user.sh 
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh /etc/X11/xinit/xinitrc.d/localuser.sh 
/etc/X11/xinit/Xclients 
/etc/X11/xinit/Xsession 
/etc/X11/xinit/xinitrc ………………省略部分输出信息………………

全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:

[root@jiloc ~]# find / -name "*.mp4" -exec rm -rf {} ;

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注