find的8种常用命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find的8种常用命令相关的知识,希望对你有一定的参考价值。
find 命令的基本信息如下:
- 命令名称:find。
- 英文原意:search for files in a directory hierarchy.
- 所在路径:/bin/find。
- 执行权限:所有用户。
- 功能描述:在目录中查找文件。
命令格式
find 搜索路径 [选项] 搜索内容
find 是比较特殊的命令,它有两个参数:
- 第一个参数用来指定搜索路径;
- 第二个参数用来指定搜索内容。
1.按名称或正则表达式查找文件
[root@localhost ~]#find 搜索路径 [选项] 搜索内容
选项:
- -name: 按照文件名搜索;
- -iname: 按照文件名搜索,不区分文件名大小;
- -inum: 按照 inode 号搜索;
按特定名称搜索文件
find . -name test.txt
如何查找所有格式为 pdf 的书籍?使用正则表达式:
find . -name "*.pdf"
2.查找不同类型的文件
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
- -type d:查找目录
- -type f:查找普通文件
- -type l:查找软链接文件
搜索目录:
find . -type d -name "apps*"
搜索符号连接
find . -type l -name "apps*"
3.按指定的时间戳查找文件
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。
[root@localhost ~]# find搜索路径 [选项] 搜索内容
选项:
- -atime [+-]时间: 按照文件访问时间搜索
- -mtime [+-]时间: 按照文改时间搜索
- -ctime [+-]时间: 按照文件修改时间搜索
这里用 mtime 数据修改时间来举例,重点说说 "[+-]"时间的含义。
- -5:代表@内修改的文件。
- 5:代表前5~6天那一天修改的文件。
- +5:代表6天前修改的文件
要搜索 atime 超过5天的文件
find . -type f -atime +5
如果我们需要查找 mtime 正好是 5 天前的文件,请不要包含 +,因为它的意思是“大于”
find . -type f -mtime 5
搜索 ctime 在 5~10 天前的文件:
find . -type f -ctime +5 -ctime -10
4.按照文件大小搜索
[root@localhost ~]#find 搜索路径 [选项] 搜索内容
选项:
- -size[+-]大小:按照指定大小搜索文件
这里的"+"的意思是搜索比指定大小还要大的文件,"-" 的意思是搜索比指定大小还要小的文件。
find 命令的默认单位不是字节。如果不写单位,那么 find 命令是按照 512 Byte 来进行査找的。 其计量单位指定为以下约定:
b:512 字节块(默认)
c:字节
w:双字节字
k:KB
M:MB
G:GB
要查找大小为 10 MB ~ 1 GB 的文件
find . -type f -size +10M -size -1G
5.按权限查找文件
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
- -perm 权限模式:査找文件权限刚好等于"权限模式"的文件
- -perm -权限模式:査找文件权限全部包含"权限模式"的文件
- -perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件
为了便于理解, 先建立几个测试文件,然后举例说明。
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test/
[root@localhost test]# touch testl
[root@localhost test]# touch test2
[root@localhost test]# touch test3
[root@localhost test]# touch test4
#建立测试目录,以及测试文件
[root@localhost test]# chmod 755 testl
[root@localhost test]# chmod 444 test2
[root@localhost test]# chmod 600 test3
[root@localhost test]# chmod 200 test4
#设定实验权限。因为是实验权限,所以看起来比较别扭
[root@localhost test]# ll
总用量0
-rwxr-xr-x 1 root root 0 6月 17 11:05 testl
-r--r--r-- 1 root root 0 6月 17 11:05 test2
-rw------- 1 root root 0 6月 17 11:05 test3
-w-------- 1 root root 0 6月 17 11:05 test4
#查看权限
"-perm权限模式",代表査找的权限必须和指定的权限模式一模一样
[root@localhost test]#find.-perm 444
./test2
[root@localhost test]#find.-perm 200
./test4
#按照指定权限搜索文件,文件的权限必须和搜索指定的权限一致,才能找到
"-perm-权限模式",代表的是文件的权限必须全部包含搜索命令指定的权限模式,才可以找到
[root@localhost test]#find .-perm -200
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限
因为 test4 的权限 200(-w-------)、test3 的权限 600(-rw-------)和 test1 的权限 755(-rwxr-xr-x) 都包含 200(--w-------) 权限,所以可以找到;而 test2 的权限是 444 (-r--r--r--),不包含 200 (--w-------)权限,所以找不到,
[root@localhost test]# find .-perm -444
.
./test2 <-此文件权限为444
./test1 <-此文件权限为755
#搜索文件的权限包含444的文件
"-perm+权限模式",是只要包含任意一个指定权限,就可以找到
[root@localhost test]# find .-perm +200
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限。
因为 test4 的权限 200 (--w-------)、test3 的权限 600 (-rw-------)和 test1 的权限 755 (-rwxr-xr-x)都包含 200(--w-------)权限,所以可以找到;而 test2 的权限是 444 (-r--r--r--),不包含 200 (--w-------)权限,所以找不到。
6.按所有权查找文件
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
- -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
- -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
- -user 用户名:按照用户名査找所有者是指定用户的文件
- -group 组名:按照组名査找所属组是指定用户组的文件
- -nouser:査找没有所有者的文件
查找所有属于 jenkins 的文件
find -type f -user jenkins
7.find命令的集合运算
[root@localhost ~]#find 搜索路径 [选项] 搜索内容
选项
- -a:and逻辑与(默认)
- -o:or逻辑或
- -not:not逻辑非
-a:and逻辑与
[root@localhost ~]# find.-size +2k -a -type f
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
-o:or逻辑或
[root@localhost ~]#find.-name jenkins -o -name tomcat
./jenkins
./tomcat
#在当前目录下搜索文件名要么是jenkins的文件,要么是tomcat的文件
-not:not逻辑非
[root@localhost ~]# find.-not -name cangls
#在当前目录下搜索文件名不是cangls的文件
8.在找到文件后执行命令
-exec选项
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令2\\;
首先,请大家注意这里的""和"\\;"是标准格式,只要执行"-exec"选项,这两个符号必须完整输入,-exec
选项后面的命令必须以分号(;)结束。
其次,这个选项的作用其实是把 find 命令的结果交给由"-exec"调用的命令 2 来处理。""就代表 find 命令的査找结果,即 是用于查找结果的占位符,如果您不使用它,该命令将对所有文件执行(而不是您刚刚通过 find 命令找到的文件)。
[root@localhost test]# find.-perm 444 -exec ls -l \\;
-r--r--r-- 1 root root 0 6月 17 11:05 ./test2
#使用"-exec"选项,把find命令的结果直接交给"ls -l"命令处理
-ok选项
"-ok"选项和"-exec"选项的作用基本一致,区别在于:"-exec"的命令会直接处理,而不询问;"-ok"的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行
[root@localhost test]# find .-perm 444 -ok rm -rf\\;
<rm…./test2>?y <-需要用户输入y,才会执行
#我们这次使用rm命令来删除find找到的结果,删除的动作最好确认一下
以上是关于find的8种常用命令的主要内容,如果未能解决你的问题,请参考以下文章