在使用linux时经常会不知道自己想要的文件在哪里存放着,可能会知道一个大致的位置但是却不知道精确目录和位置,这个时候搜索变得异常的方便,今天就来学学搜索命令。

find 搜索命令

这个命令是真实的遍历模式,会逐层搜索需要匹配的目标,直到搜索完毕。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//列出当前目录文件以及子目录的所有文件
[yuekang@ykdev test]$ find .
.
./abnc.txt

//指定文件搜索
[yuekang@ykdev test]$ find -name "ab*"
./abnc.txt

//忽略大小写搜索
[yuekang@ykdev test]$ find -iname "AB*"
./abnc.txt

//搜索多个文件
[yuekang@ykdev test]$ find . -name "*.txt" -o -name "*.pdf"
./abnc.txt
./ab.pdf

//匹配文件路径或文件,实际上还是匹配文件
[yuekang@ykdev test]$ find . -path "*yuekang*"
[yuekang@ykdev test]$ find . -path "*ab*"
./abnc.txt
./ab.pdf
[yuekang@ykdev ~]$ find /home/ -path "*yuekang*"
find: ‘/home/jira’: 权限不够
/home/yuekang

//正则匹配文件
[yuekang@ykdev test]$ find . -regex ".*\(\.txt\|\.pdf\)$"
./abnc.txt
./ab.pdf

//否定查找
[yuekang@ykdev test]$ find . ! -name "*.pdf"
.
./abnc.txt

locate 搜索命令

这个命令不搜索具体目录,而是搜索一个数据库记录(/var/lib/mlocate/mlocate.db),更新频率为每天更新,所以可能会搜索到已经删除或者搜索不到刚创建的文件,updatedb 可以完成重新刷新文件信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//查找文件,当新建文件查询不到时需要手动updatedb更新本地文件数据库
╭─root@ykdev /home/yuekang/test
╰─# locate abnc.txt
╭─root@ykdev /home/yuekang/test
╰─# updatedb
╭─root@ykdev /home/yuekang/test
╰─# locate abnc.txt
/home/yuekang/test/abnc.txt

//通过regex 正则匹配文件

root@ykdev /home/yuekang/test
╰─# locate -r ".*\(\.pdf\)"
/home/yuekang/test/ab.pdf
/usr/share/doc/aic94xx-firmware-30/README-94xx.pdf
/usr/share/doc/bzip2-devel-1.0.6/manual.pdf
/usr/share/doc/libtasn1-4.10/libtasn1.pdf
/usr/share/doc/libxml2-devel-2.9.1/tutorial/xmltutorial.pdf