基于目录深度的搜索
find命令在使用时会遍历所有子目录,我们可以采用一些参数来限制find命令遍历的深度,-maxdepth和-mindepth就是这类参数
只需要搜索当前目录和当前目录的一级子目录
[root@mio-test bin]# find /etc/ -maxdepth 2 -name '*.sh' /etc/profile.d/colorls.sh /etc/profile.d/less.sh /etc/profile.d/glib2.sh /etc/profile.d/which2.sh /etc/profile.d/lang.sh /etc/bash_completion.d/gsettings-bash-completion.sh /etc/bash_completion.d/gdbus-bash-completion.sh
只搜索当前目录二级子目录之后的文件
[root@mio-test bin]# find /etc/ -mindepth 2 -name '*.sh' /etc/dhcp/dhclient.d/ntp.sh /etc/profile.d/colorls.sh /etc/profile.d/less.sh /etc/profile.d/glib2.sh /etc/profile.d/which2.sh /etc/profile.d/lang.sh /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh /etc/X11/xinit/xinitrc.d/50-xinput.sh /etc/X11/xinit/xinitrc.d/localuser.sh /etc/kde/env/imsettings-kde.sh /etc/bash_completion.d/gsettings-bash-completion.sh /etc/bash_completion.d/gdbus-bash-completion.sh
根据文件类型的搜索
类UNIX系统将一切都视为文件,文件有不同的类型,例如普通文件,目录,字符设备,块设备,符号链接,硬链接,套接字以及FIFO等
-type则可以对文件搜索进行过滤,只查找我们指定的文件类型
type参数 支持的类型有下面几种
普通文件 f
符号链接 l
目录 d
字符设备 c
块设备 b
套接字 s
fifo p
搜索块设备
[root@mio-test Vendor]# find / -type b find: `/proc/15466/task/15466/fd/5': No such file or directory find: `/proc/15466/task/15466/fdinfo/5': No such file or directory find: `/proc/15466/fd/5': No such file or directory find: `/proc/15466/fdinfo/5': No such file or directory /dev/ram9 /dev/ram8 /dev/ram7 …
根据文件时间进行搜索
UNIX/Linux文件系统中的每一个文件都有三种时间戳
访问时间(-atime) 用户最近一次访问文件的时间
修改时间(-mtime) 文件内容最后一次被修改的时间
变化时间(-ctime) 文件元数据,最后一次被修改的时间
显示当前搜索目录最近一周被访问过的文件
[root@mio-test Vendor]# find /root/ -maxdepth 1 -type f -atime -7 /root/.bash_logout /root/.bash_history /root/.bashrc /root/.bash_profile /root/php-5.3.29.tar.gz /root/1.sh
基于文件大小的搜索
-size可以指定搜索的文件大小
支持的文件大小单元有:
b 块(512字节)
c 字节
w 字(2字节)
k KB
m MB
g GB
显示大于1M的文件
[root@mio-test ~]# find -type f -size +1M ./php-5.3.29/configure ./php-5.3.29/pear/install-pear-nozlib.phar ./php-5.3.29/ext/fileinfo/data_file.c ./php-5.3.29/ext/sqlite3/libsqlite/sqlite3.c ./php-5.3.29/ext/date/lib/timezonedb.h ./php-5.3.29/Zend/zend_vm_execute.h ./php-5.3.29.tar.gz
删除匹配的文件
-delete 可以用来删除find查找到的文件
删除/tmp/下后缀为log的文件
[root@mio-test ~]# find /tmp/ -name '*.log' /tmp/yum.log [root@mio-test ~]# find /tmp/ -name '*.log' -delete [root@mio-test ~]# find /tmp/ -name '*.log' [root@mio-test ~]#
基于文件权限和所有权的搜索
-perm 可以指定文件的权限
查找/home/目录下权限为777的文件
[root@mio-test home]# find /home/ -perm 777 /home/logs /home/logs/monitor /home/logs/monitor/Order …
-user可以指定文件的属主
查找/home/test/下属主为nobody的文件
find /home/test/ -user ‘nobody’
结合find执行命令或操作
find命令可以借助选项-exec与其他命令进行结合
在-exec选项中 {}是一个特殊的标识,被查找到的文件会替换{},然后做为命令的一部分执行
查找出/tmp/目录下的所有文件,将这些文件的属主设置为nobody
[root@mio-test home]# find /tmp/ -name '*' -exec chown nobody {} \; [root@mio-test home]# ll /tmp/ total 64 -rw------- 1 nobody nobody 7044 Aug 7 15:04 wrtGXAfmG -rw------- 1 nobody nobody 12321 Aug 7 16:55 wrtiYcQqu -rw------- 1 nobody nobody 5530 Aug 7 15:04 wrtmvj48M -rw------- 1 nobody nobody 7042 Aug 7 15:02 wrtmXzLzs -rw------- 1 nobody nobody 5292 Aug 7 16:55 wrtUSESTM -rw------- 1 nobody nobody 5534 Aug 7 15:02 wrtuXF8Sv -rw-------. 1 nobody root 4138 Aug 7 09:47 yum_save_tx-2014-08-07-09-47Hr4LpX.yumtx
排除条件
在搜索目录并执行某些操作的时候,有时为了提高性能,需要跳过一些目录或文件
搜索/root/的当前目录,排除后缀为log的文件
[root@mio-test ~]# find /root/ -maxdepth 1 \( -name '*.log' -prune -o -name '*' \) /root/ /root/anaconda-ks.cfg /root/.pki /root/.bash_logout /root/.bash_history /root/.bashrc …
搜索/root/的sh文件,排除掉 php-5,3,29 这个目录
[root@mio-test ~]# find /root/ \( -name 'php-5.3.29' -prune -o -name '*.sh' \) /root/php-5.3.29 /root/own.sh /root/1.sh