Linux命令之find

来源:互联网 发布:淘宝客软文推广 编辑:程序博客网 时间:2024/06/05 09:37

Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能强大。即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要你有相应权限。

命令格式:
find pathname -option [-print, -exec ,-ok …]

参数详解:
pathname :查找的路径,. 表示当前路径,/表示根目录, ~表示Home路径,相当于$HOME

1 按名字或正则表达式或路径查找:
名字和路径中支持的是通配符,而不是正则表达式。注意通配符正则表达式的区别。

-name 按名字查找,支持通配符
-iname 按名字查找,不区分大小写
-regex 按正则表达式查找
-iregex 按正则表达式查找,不区分大小写
-path 按路径查找,支持通配符
-ipath 按路径查找,不区分大小写
在当前路径查找后缀名为txt的文件
find . -name “*.txt” -print

在当前路径查找后缀名为txt的文件,不区分大小写
find . -iname “*.txt” -print

基于正则表达式匹配,
find . -regex “.*(.txt|.pdf)$” -print

基于正则表达式,不区分大小写
find . -iregex “.*(.txt|.pdf)$” -print

路径查找,查找包含之后单个字符是opt的路径
find . -path “*opt” -print
路径查找,查找包含之后单个字符是opt的路径,不区分大小写
find . -ipath “*opt” -print

2 按权限查找
-perm +mode 至少有一位满足要求
-perm -mode 每一位都要满足要求
-perm mode 权限和mode一致

权限是9位表示,分别为用户,群组和其他三组。假设为rw-r–r–
+mode中,9位中,只要有一位一样,就满要求。r——–,即只要有一个权限满足就可以
-mode中,mode中多有的非-位都要满足,即,至少满足mode中指定的权限
mode 是指权限和mode指定的一样才满足要求

查找当前目录下三组(user,group,other)中至少有一个有执行权限的文件或目录
find . -perm +111

查找当前目录下三组中都有执行权限的文件或目录
find . -perm -111

查找当前目录下三组中都只有执行权限的文件或目录
find . -perm 111

3 按时间查找
-atime [N , +N, -N] 访问文件,以天为单位
-ctime [N , +N, -N] 改变文件属性,以天为单位
-mtime [N , +N, -N] 改变文件内容,以天为单位
-amin [N , +N, -N] 访问文件,以分钟为单位
-cmin [N , +N, -N] 改变文件属性,以分钟为单位
-mmin[N , +N, -N] 改变文件内容,以分钟为单位
-newer file mtime比file文件的mtime新的文件
N 表示在第N天或第N分钟
+N 表示超过N天或N分钟
-N 表示在N天内或N分钟内

查找5天内访问的文件
find . -atime -5

4 根据文件类型查找
-type
f // 普通文件
d //目录文件
l //链接文件
b //块设备文件
c //字符设备文件
p //管道文件
s //socket文件
查找/tmp目录下的文件
find /tmp -type f

5 按文件大小查找
-size
b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节
+N:表示大于N
-N:表示小于N

#find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
#find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
#find /tmp -size -2M //查找在/tmp 目录下小于2M的文件

6 根据文件用户和组查找
-user 用户名或用户ID
-group 组名或组ID
-nouser 用户名或用户ID
-nogroup 组名或组ID

查找拥有者为root的文件
find . -user root -type f

7 深度相关
-maxdepth N 设置搜索最大深度为N
-mindepth N 跳过前N层,
-depth 搜索时,先搜索该目录下的文件,再去访问该目录下的子目录
设置最大深度为5
find . -maxdepth 5 -type f

8组合查找
-a : and
-o:or
-not:
查找文件大于6k的文件
find . -type f -a size +6k

9 跳过某个目录
-prune 跳过某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。如果希望在test目录下查找文件,但不希望在test/test3目录下查找,可以用:
find test -path “test/test3” -prune -o -print
说明:
find [-path ..] [expression]
在路径列表的后面的是表达式
-path “test” -prune -o -print 是 -path “test” -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果
-path “test” 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path “test” -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为:
if -path “test” then
-prune
else
-print
实例2:避开多个文件夹:
命令:
find test “\ ( -path test/test4 -o -path test/test3 \)” -prune -o -print
圆括号表示表达式的结合。 \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。

10 本文件系统查找
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。

从当前目录开始查找位于本文件系统中文件名以XC结尾的文件
find . -name “*.XC” -mount -print

11 后继命令
-print 输出
-exec command {} \; 执行shell命令
-ok command {} \; 执行shell命令,每一次操作都需要用户确认
注意 {} \; 不可省略,且{} 和 \;之间有一个空格.
查找权限为411的文件并显示详细信息
find . -perm 411 -type f -exec ls -l {} \;
{}相当于是查找到的每一条结果,然后用命令对其操作。

也可以用-ok
find . -perm 411 -type f -ok ls -s {} \;
每次都需要询问是否执行

原创粉丝点击