- 是什么:Find命令是在目录中查找文件
1.find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode 号等来搜索文件。但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,不要指定过大的搜索范围。
-
find 命令的基本信息如下:
- 命令名称:find。
- 英文原意:search for files in a directory hierarchy.
- 所在路径:/bin/find。
- 执行权限:所有用户。
- 功能描述:在目录中查找文件。
-
- 语法:Find[path][expression]
path 是要查找的目录路径,expression 是用于过滤和限制查找结果的选项和参数。。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
1.-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
2.-amin n : 在过去 n 分钟内被读取过
3.-anewer file : 比文件 file 更晚被读取过的文件
4.-atime n : 在过去 n 天内被读取过的文件
5.-cmin n : 在过去 n 分钟内被修改过
6.-cnewer file :比文件 file 更新的文件
7.-ctime n : 在过去 n 天内修改的文件
8.-mtime n : 在过去 n 天内修改过的文件
10.-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
11.-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
12-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
13.-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
-
实例
上下文环境搭建。
例如:将/etc目录复制到/tmp目下之下:
#cp -a /etc /tmp/
#cd /tmp
-
将当前目录及其子目录下所有文件后缀为 .conf 的文件列出来:
# find . -name "*.conf"
将当前目录及其子目录中的所有文件列出:
# find . -type f
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
# find . -ctime 20
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
# find /var/log -type f -mtime +7 -ok rm {} \;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
# find . -type f -perm 644 -exec ls -l {} \;
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
# find / -type f -size 0 -exec ls -l {} \;
但是 find 命令有一个小特性,就是搜索的文件名必须和你的搜索内容一致才能找到。如果只包含搜索内容,则不会找到。我们做一个实验:
[root@localhost ~]# touch yum.conf.bak
#在/root/目录下建立一个文件yum.conf.bak
[root@localhost ~]# find / -name yum.conf
/etc/yum.conf
#搜索只能找到yum.conf文件,而不能找到 yum.conf.bak 文件find 能够找到的是只有和搜索内容 yum.conf 一致的 /etc/yum.conf 文件,而 /root/yum.conf.bak 文件虽然含有搜索关键字,但是不会被找到。
这种特性我们总结为:find 命令是完全匹配的,必须和搜索关键字一模一样才会列出。
Linux 中的文件名是区分大小写的,也就是说,搜索小写文件,是找不到大写文件的。如果想要大小通吃,就要使用 -iname 来搜索文件。[root@localhost ~]# touch CANGLS
[root@localhost ~]# touch cangls
#建立大写和小写文件
[root@localhost ~]#find . –iname cangls
./CANGLS
./cangls
#使用-iname,大小写文件通吃