linux搜索命令---find
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux搜索命令---find相关的知识,希望对你有一定的参考价值。
强大的find命令在linux中是用来在指定目录下查找文件的,对于find命令来说任何位于参数之前的字符串都将被视为将要被查找的目录名,而如果使用该命令时,不设置任何参数,则find命令将默认在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
一、find 命令格式 (即语法)
1、find命令的一般形式为:
# find 查找路径名 -options [-print -exec -ok ...]
*查找路径名:指定具体的目标路径,默认为当前目录。
*options(查找条件):指定的查找标准,可以为文件名、大小、类型、权限等标准,默认为找出指定路径下的文件
*处理动作:对符合的文件做操作,默认打印输出至屏幕。
2、find命令的参数:
# pathname: 在find命令所查找的目录路径中,可以用.来表示当前目录,用/来表示系统根目录。
# -exec: find命令对匹配的文件执行该参数所给出的shell命令时,相应命令的形式为"command { } ; ",这里要注意"{ }"和“;”之间的空格。
# -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
二、find命令工作特点
1、 优点:
#实时查找
#精确查找,搜索整个目录下所有文件
#可以对查询到的文件惊喜指定动作,即查看、删除、移动等等。
2、缺点:
#查找速度太慢
三、find命令的使用
我们可以把查询条件想象的分为两类,即选项和测试条件
1、find命令选项
#指定目录的查找范围
* -mindepth N 最小搜索深度
* -maxdepth N 最大搜索深
* -mindepth N -maxdepth N 只搜索指定深度
#查找空文件
* -empty 查询内容为空的文件
#排除符号连接
* -follow 排除符号连接
2、 find命令测试条件
#根据文件名进行查找
* -name "文件名”以文件名进行查找,支持使用glob
* -iname "文件名” 按文件名不区分大小写查找,只支持glob风格的查找方式:*,[],[^],?
* -regex "文件名”基于正则表达式查找文件,正则部分要用引号引起来,同时要表示文件的完整路径,搜索当前目录时,用./,搜索指定目录时如/app,则用/app/....
* -inum inode号 以inode号为查找条件
* -samefile name 找出与name inode相同的文件
* -links n 找到硬链接数为n的文件
#根据文件从属关系进行查找
* -user 用户名:查找属主为指定用户(UID)的文件
* -group 组名 :查找属组为指定组(GID)的文件
* -uidUserID:查找属主为指定的UID号的文件
* -gidGroupID:查找属组为指定的GID号的文件
* -nouser:查找没有属主的文件
* -nogroup:查找没有属组的文件
#根据文件类型进行查找 -type "类型”
* f: 普通文件
* d: 目录文件
* l: 符号链接文件
* s:套接字文件
* b: 块设备文件
* c: 字符设备文件
* p: 管道文件
#根据文件大小进行查找
* -size [+|-]#UNIT 常用单位:k, M, G,c(byte) 注释: #UNIT: (#-1, #] ,如6k表示(5k,6k];+#UNIT :(#,∞) ,如+6k表示(6k,∞);-#UNIT:[0,#-1] ,如-6k 表示[0,5k]。
#根据时间进行查找
* -atime[+|-]time/-amin[+|-]time 以访问时间(天/分钟)查找
* -mtime[+|-]time/-mmin[+|-]time 以数据修改时间(天/分钟)查找
* -ctime[+|-]time/-cmin[+|-]time 以元数据修改时间(天/分钟)查找
#根据文件权限进行查找
* -perm MODE 精确权限匹配
* -perm /MODE :任何一类(u,g,o)对象的权限中只要能一位匹配即可,相互之间表示或的关系,"+"等同于“/”,但“+” 从centos7开始淘汰
* -perm -MODE :每一类对象都必须同时拥有指定权限,相互之间表示与的关系
#组合条件测试
* 内容包含 与:-a 或:-o 非: -not
* 德 摩根定律:
非(A且B)=(非A)或(非B); 非 (A或B)=(非A)且(非B)
3、 处理动作
# -print (默认) 查找的结果打印到终端
# -ls 查找的结果显示详细信息,以长文件的格式输出
# -delete 将查找的结果删除,不交互
# -ok shell command {} ; 查找到的文件传递给COMMAND命令,提每步都给用户提示确认操作(交互执行shell命令)
# -exec shell command {} ; 查找到的文件传递给COMMAND命令,直接修改完成,不给用户确认(非交互执行shell命令)
# 注意:find将查找到的文件路径一次性传递给后面的命令,但有很多命令不能接受过长的参数,从而将会导致命令执行失败,所以有时我们需要借助xargs命令,来帮助我们进行参数的传递,例如 :
[[email protected] ~]# find /etc -type f | xargs -i {} cp/app/tmp -i参数是由find命令的结果传给xargs命令的,并且由-i指定结果代替符 {}。
二、
以上是关于linux搜索命令---find的主要内容,如果未能解决你的问题,请参考以下文章