Skip to content

Latest commit

 

History

History
90 lines (59 loc) · 3.6 KB

5.60-find命令.md

File metadata and controls

90 lines (59 loc) · 3.6 KB

find - 顾名思义,用来查找文件的命令。 在讲find之前,先总结一下Linux系统下面可以查找文件或目录的命令都有谁。

which

在前面已经用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which 一下很容易就知道了。

whereis

通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件

如:whereis  ls

locate

和whereis类似,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里。

后边直接跟文件名。如果你的linux没有这个命令,请安装软件包 'mlocate', 可以使用这个命令来安装 yum install -y  mlocate ,如果你刚装上这个命令,初次使用会报错。

[root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory

这是因为系统还没有生成那个文件列表库。你可以使用 updatedb 命令立即生成(更新)这个库。如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的。你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。

locate所搜索到的文件列表,不管是目录名还是文件名,只要包含我们要搜索的关键词,都会列出来,所以locate不适合精准搜索,这个命令阿铭使用的也并不多,你只要明白有这么一个工具即可,用到时再去深究其用法吧。

find

语法 : find  [路径] [参数] 下面介绍几个常用的参数

-atime +n/-n : 访问或执行时间大于/小于n天的文件
-ctime +n/-n : 写入、更改inode属性(例如更改所有者、权限或者链接)时间大于/小于n天的文件
-mtime +n/-n : 写入时间大于/小于n天的文件
-mmin +n/-n : 更改时间大于/小于n分钟的文件

示例:
# find /tmp/ -mtime -1
# find /tmp/ -atime +10
# find /tmp/ -atime +1


-name filename 直接查找该文件名的文件,这个选项使用很多。

# find . -name test2
# find . -name "*.txt"  //用通配时要加上双引号

-type filetype 通过文件类型查找。文件类型有 f, b, c, d, l, s 等。

# find /tmp/ -type d
# find /tmp/ -type f

-size [+n/-n] 根据大小查找(单位:c k M G),其中字节不是b,而是c

# find . -size +10k
# find . -size -1M 
# find . -size 4k

-perm [+/-]权限   

# find . -perm 777

其他高级用法:

忽略大小写文件名查找: # find /home -iname  abc.txt

查找所有以.txt和.pdf结尾的文件 # find . \( -name "*.txt" -o -name "*.pdf" \)

基于正则表达式匹配文件路径: # find . -regextype "posix-egrep" -regex ".*(\.txt|\.pdf)$"

基于正则表达式匹配文件路径(忽略大小写): # find . -regextype "posix-egrep" -iregex ".*(\.txt|\.pdf)$"

找出/home下不是以.txt结尾的文件: # find /home ! -name "*.txt"

限定查找目录深度:# find . -maxdepth 3 -type f

查找后再处理:
1)删除
# find . -type f -name "*.gz" -mtime +30 -exec rm -f {} \;
# find . -type f -name "*.gz" -mtime +30 -ok rm {} \;
# find . -type f -name "*.gz" -mtime +30 |xargs rm -f
-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。

2)改名
# find . -name "*.txt" -exec mv {} {}.bak \;
# find . -name "*.txt"|xargs -i mv {} {}.bak