Linux下find命令详解
一、find命令
find命令是一种用来在Linux系统中查找定位文件的很好用的工具。
find命令是一种实时查找工具,根据文件层级结构,通过遍历指定的起始路径下的所有文件来查找目标文件。它的查找准确度高,实时性高,但相应的,查询速度会有所降低。
二、命令详解
find命令的一般语法为下:
find [options] [查找起始路径] [查找条件] [处理动作]
1、OPTIONS:一般用不到;
2、查找起始路径:指定具体搜索目标起始路径,默认当前目录;
3、查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等标准,默认为指定路径下的所有文件;
4、处理动作:对符合查找条件的文件做出的操作,默认为输出至标准输出(-print)。
其中需要详细分析是查找条件和处理动作。
查找条件:
a)根据文件名查找:
-name "pattern":查找支持文件名glob风格的匹配;
-iname "pattern" :查找支持文件名glob风格的匹配,且不区分大小写;
-regex "pattern":查找支持正则表达式匹配,但是其匹配整个路径而非其名;需注意
b)根据文件从属关系查找:
-user Username:查找属主指定用户的所有文件
-group Groupname:查找属组指定用户的所有文件
-uid UID:查找属主指定UID的所有文件
-gid GID:查找属组指定GID的所有文件
-nouser:查找没有属主的所有文件
-nogroup:查找没有属组的所有文件
c)根据文件类型查找:
-type TYPE:f,查找普通文件
d,目录文件
l,查找符号链接文件
b,查找块设备文件
c,查找字符设备文件
s,查找套接字文件
p,查找命名管道文件
d)根据文件大小查找:
-size [+|-] #UNIT
常用单位,K、M、G,默认单位为字节
#UNIT:(#-1,#],查找以该单位为精度的准确大小的文件
-#UNIT:[0,#-1],查找0到#-1大小的文件,包括#-1大小的文件
+#UNIT:(#,∞),查找#到无穷大大小的文件,不包括#大小的文件
e)根据时间戳查找:(因为时间戳都是来自过去的改动,所以可以将#理解为负数,如-7为7天前到现在)
以“天”为单位:-atime,-mtime,-ctime
#:(#-1,#],查找第#天内有过时间戳改动的文件
-#:(#,0],查找从#天到现在有过时间戳改动的文件
+#:(∞ ,#-1],查找#-1天以前有过时间戳改动的文件
以“分钟”为单位:-amin,-mmin,-cmin
范围表示用法同上。
f)根据文件权限查找:
-perm [/|-]mode
mode:精确查找权限匹配的文件
/mode:查找任何一类用户(ugo)的权限中的任何一位(rwx)符合条件的文件(9位权限之间存在“或”关系)
-mode:查找每一类用户的权限中的每一位同时符合条件的文件(9位权限之间存在“与”关系 )
g)组合查找:
与:-a,默认组合逻辑(可省略),查找2个条件同时满足的文件
或:-o,查找符合任意一个条件的文件
非:-not,!查找与条件相反的所有文件
2个公式: !A -a !B=!(A -o B)
!A -o !B=!(A -a B)
处理动作:
-print:输出至标准输出;默认
-ls:类似 ls -l
-delete:删除查找到的文件
-fls /path/tosomefile:把查找到的所有文件的详细信息保存至指定文件中
-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户进行确认 ({}:引用找到的文件)
-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;