shell学习之locate和find命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell学习之locate和find命令相关的知识,希望对你有一定的参考价值。

linux系统中有几个关于文件搜索的命令,例如:locate,wheris以及find在工作中比较常用到。.

1.locate命令:locate查找文件是基于/var/lib/mlocate数据库,该数据库包含所有的本地文件信息,Linux系统自动创建这个数据库,并且每天自动更新一次。本地刚创建一个文件,但使用locate命令搜索不到本地文件,需要使用updaetedb手动更新一下本地数据库。

[[email protected] ~]# touch helloWorld
[[email protected] ~]# locate helloWorld 
[[email protected] ~]# updatedb
[[email protected] ~]# locate helloWorld 
/root/helloWorld
[[email protected] ~]# 
常用使用方法及参数:
locate  文件名称                              #会匹配出本地/var/lib/mlocate数据库中已经建立索引的包含文件名称的所有文件。
[[email protected] ~]# locate /etc/passwd
/etc/passwd
/etc/passwd-
[[email protected] ~]# 

常用参数
-h --help                                                                                                               #显示帮助
-V  --version                                                                                                          #显示版本信息
-b, --basename         match only the base name of path names                     #只匹配路径名的基本名称
-c, --count               only print number of found entries                                    #只打印找到的条目数量
-e, --existing         only print entries for currently existing files                         #仅打印当前存在的文件的条目
-i, --ignore-case      ignore case distinctions when matching patterns             #忽略大小写
-w, --wholename        match whole path name (default)                                  #匹配整个路径名称(默认)

2.find命令:find命令可以在不通位置根据不同标准搜索任何文件,并支持多种方式处理搜索结果。其工作流程:(1)搜索所有用户指定的路径,包括所有的子目录。(2)对于遇到的每个文件,根据是否符合用户指定的条件,所有符合条件的文件形成一个列表。(3)对于结果列表的文件,执行用户指定的操作。

参数:
-name filename #表示包含指定匹配模式的文件名
-iname filename #表示包含指定匹配模式的文件名,不区分大小写
-type #指定文件类型,f表示普通文件 ,d表示目录,c表示块设备,p表示管道,l表示连接
-user userid #匹配其所有者为指定用户ID的文件
-group groupid #匹配其所有者的组为指定组ID的文件
-size size  #匹配其大小为size的文件
-empety   #匹配空文件
-amin[-+]n #文件最后一次访问时间,-n表示时间为n分钟以内,+n表示n分钟之前,n表示刚好n分钟
-atime [-+]n    #天
-cmin[-+]n    #文件最后一次状态改变时间
-ctime[-+]n   #
-mmin [-+]n  #最后一次被修改时间
-mtime [-+]n 
动作:
-print #默认动作,将搜索结果写入到标准输出
-fprint file #将搜索结果写入到file中
-ls #以详细格式展示搜索结果
-fls file #将详细格式结果写入file
-delete #将结果文件删除
-exec command {} \; #查找并执行命令,{}表示搜索到的文件名
-ok command {}\; #查找并执行命令,但是需要用户确认

列子,找到3分钟之前创建包含一个数字的文件并将其删除。

[[email protected] home]# ll -rst
total 8
4 drwxr-xr-x. 2 root   root   4096 Mar 21 19:34 ISO
4 drwx------. 4 xguest xguest 4096 Mar 22 01:06 xguest
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file1[a-z].1
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file2[a-z].2
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file3[a-z].3
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file5[a-z].5
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file7[a-z].7
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file6[a-z].6
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file8[a-z].8
0 -rw-r--r--  1 root   root      0 Apr 20 17:07 file9[a-z].9
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text1.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text2.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 tex

[[email protected] home]# find -type f -mmin +3 -iname "*[1-9]*" -exec rm -rf {} \;
[[email protected] home]# ll -rst
total 8
4 drwx------. 4 xguest xguest 4096 Mar 22 01:06 xguest
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text1.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text2.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text3.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text4.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text5.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text6.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text9.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text8.txt
0 -rw-r--r--  1 root   root      0 Apr 20 17:27 text7.txt
4 drwxr-xr-x. 2 root   root   4096 Apr 20 17:28 ISO
[[email protected] home]# 

以上是关于shell学习之locate和find命令的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式linux学习之Shell操作

嵌入式linux学习之Shell操作

嵌入式linux学习之Shell操作

嵌入式linux学习之Shell操作

运维学习之find命令基础

linux学习之shell编程基础