一 find的用途:
*概述:find指令用于在指定目录下查找文件,并可以对查找到的文件执行指定的操作。
二 使用指南:
(1)列出当前目录及子目录下的所有的文件和文件夹。
$ find base_path base_path可以是任何的位置,find会从该位置向下查找。
(2)根据文件名或正则表达式匹配搜索。
选项-name的参数指定了文件名所必须匹配的字符串,可以使用通配符作为参数使用,-iname选项和-name类似,只是它忽略大小写。
$ find .-name "example*"
选项-path的参数可以用通配符来匹配文件路径或文件,-name总是用给定的文件名进行匹配,-path则将文件路径作为一个整体进行匹配。
$ find . -name "shell*"
/home/lyr/shell/A
/home/lyr/shell/shell
选项-regex的参数和-path类似,只不过-regex是基于正则表达式来匹配文件路径的。
(3)find操作与逻辑运算符结合
find的查找条件可以是用逻辑运算符组成的复合条件。
逻辑与:用选项"-a"表示;
逻辑或:用选项“-o”表示;
逻辑非:用选项“!”表示。
(4)基于目录深度的探索
find命令会在使用时遍历所有的子目录,可以用一些深度参数来限制find命令遍历的深度,其中-maxdepth(指定最大深度)和-mindepth(指定最小深度)。
$ find . -maxdepth 2 -name "example"
(5)根据文件类型搜索
类unix系统将一切都视为文件,文件具有不同的类型,例如:普通文件(f)、目录(d)、字符设备(c)、块设备(b)、符号链接(l)、套接字(s)以及FIFO(p)等。
选型-type可以对文件搜索进行过滤。
$find . -type d
(6)根据文件时间进行搜索
Unix/Linux文件系统中的每一个文件都有三个时间戳(timestamp),如下:
访问时间(-atime):用户最近一次访问文件的时间。
修改时间(-mtime):文件内容最后一次修改的时间。
变化时间(-ctime):文件元数据(metadata,例如权限或所有权)最后一次修改的时间。
这三个都可作为find的时间参数,可以整数值给出,单位是天,这些整数值通常还带有-或+:-表示小于,+表示大于。
例如:(以访问时间-atime为例,其余的一样)
$ find .-type f -atime -7(最近7天内被访问的所有文件)
$find . -type f -atime 7(恰好在七天前被访问的所有文件)
$find . -type f -atime+7(访问时间超过七天的所有文件)
基于时间的参数是以分钟为计量单位的,这些包括:(用法同上)
-amin:访问时间
-mmin:修改时间
-cmin:变化时间
find还有一个-newer参数,可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的所有文件。
(7)基于文件大小的搜索:
根据文件大小,可以这样搜索:
#大于2KB的文件
$ find . -type -f -size +2k
#小于2KB的文件
$ find . -type -f -size -2k
#等于2KB的文件
$ find . -type -f -size 2k
除k之外,还可以用其他文件大小单位:
b:快(512字节)
c:字节
w:字
k:千字节
M:兆字节
G:吉字节
(8)删除匹配文件
-delete可以用来删除find查找到的匹配文件。
$ find . -type f -delete
(9)基于文件权限和所有权的匹配
文件匹配可以根据文件权限进行。
选项-perm查找符合指定的权限模式的路径名的所有文件,权限模式可以使用数字方式表示。
选项-user查找属于指定用户名的所有文件。
(10)结合find执行命令或动作
find命令可以使用选项-exec与其他命令进行结合。
$ find . -type f -user root -exec chown lyr {} \;//注意;不能省略。
{}是一个特殊的字符串,与-exec结合使用。对于每一个匹配的文件,{}都会被替换成相应的文件名。例如,上例中如果root的用户文件为text1,text2,那么chown lyr {}会被解析为chown lyr text1和chown lyr text2。
无法在-exec参数中直接使用多个命令,它只能够接受单个命令;但是有一个技巧,可以把多个命令写入到一个shell脚本中,然后在-exec中使用这个脚本。
-exec ./ command.sh {} \;
(11)让find跳过特定的目录
find操作可以跳过一些子目录来进行指定的操作。