博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玩转文件搜索利器-----find!!!
阅读量:5912 次
发布时间:2019-06-19

本文共 3603 字,大约阅读时间需要 12 分钟。

hot3.png

1.What is find?

           在linux当中用于文件搜索的命令主要用两个,一个是locate,另一个就是find。我们平常使用最多就是find命令,现在我们就来一步步学习find命令,刚刚接触到find命令的同学可能会觉得这个命令有些难度,不错,相比其他的一些常规命令,这个命令学习起来确实有一点点难度,主要是因为这个命令的选项和参数比较多。

2.How to use find?

           find命令的选项和参数确实比较多,所以刚刚接触的时候不要试图全部掌握,先学会一些简单使用规则,然后在实际应用中使用到它,然后再去学习更高端的规则,进而学习更多的参数和选项。

           我们先man一下find

1
2
3
4
5
NAME
       
find
- search
for
files
in
a directory hierarchy
 
SYNOPSIS
       
find
[-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

           看看这个手册就觉得这个命令好复杂,不过我们先忘掉它的复杂,从简单的开始

1
2
[root@localhost ~]
# find aa -name file1 -print
aa
/file1

           我们先来解释一下这个命令的执行过程:在aa目录里搜索名字是file1的文件,搜索到之后将之打印出来

           看明白这个执行过程之后就简单多了

           我们看看find命令的格式:

           find + [path] + [option] + [test] + [action]

                path:这个不用解释,就是我们想要搜索的路径

              option:这个选项是对前面的路径进行修饰的,不如常见的选项有:

                     -maxdepth N 搜索N层目录

                     -mount 不搜索其他文件系统

              test:这是学习find命令的重点,可以根据文件的各种属性来做条件判断,比如文件名,修改时间,文件的属组等等,更多的判断条件请看手册,这里的条件测试可以多个条件测试组合测试,比如文件名是aaa,而且是目录,就可以是:-name aaa -and -type d。如果多个条件测试的时候可以就是括号以确定优先级,值得注意的是,括号()在bash中是特殊字符,所以需要加\转义。

             action:这是find命令的收尾工作,当文件与我们前面指定的各种匹配测试通过之后,就说明该文件就是正是我们要寻找的文件,那么我们需要对这些文件做什么样的处理工作,就交给这个action来完成,我们列举最常用的action:

                  -print :打印,就是将搜索到的文件打印在屏幕上

                     -exec :执行一些命令,也就是说这个命令后面跟随一些命令,指定使用 \;结束,魔术字符串{}时-exec的一个特殊参数,表示前面搜索到的文件的完全路径,比如要用ls -l命令来显示搜索岛的文件:find [path] [test] -exec ls -l {} \;

3.Examples

           不能光说不练,我们来举几个例子

             先来看看我aa目录下的所有目录和文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]
# find aa
aa
aa
/b3333
aa
/b3333/cc22
aa
/b3333/ccc11
aa
/b3333/ccc33
aa
/file3
aa
/b111
aa
/b111/cc22
aa
/b111/ccc11
aa
/b111/ccc33
aa
/b222
aa
/b222/cc22
aa
/b222/ccc11
aa
/b222/ccc33
aa
/file1
aa
/file2
aa
/_file
[root@localhost ~]
#

             再来看看这里面普通文件

1
2
3
4
5
6
[root@localhost ~]
# find aa -type f
aa
/file3
aa
/file1
aa
/file2
aa
/_file
[root@localhost ~]
#

             我们新建两个文件test,_test,那么我们现在来查找以下划线开头的文件

1
2
3
4
[root@localhost ~]
# find aa -type f -and -name '_*'
aa
/_test
aa
/_file
[root@localhost ~]
#

             由于_file文件比test文件先创建,_test文件比test文件后创建,所以我们一test文件做参考,有下划线开头,而且比test后创建的文件

1
2
3
[root@localhost ~]
# find aa \( -type f -and -name '_*' -and -newer aa/test \)
aa
/_test
[root@localhost ~]
#

             看看上面的这条命令,有测试条件太多,所以我用了括号包起来,这样直观一些,括号是特殊字符,记得转义哦。

             我们来显示所以目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]
# find aa -type d
aa
aa
/b3333
aa
/b3333/cc22
aa
/b3333/ccc11
aa
/b3333/ccc33
aa
/b111
aa
/b111/cc22
aa
/b111/ccc11
aa
/b111/ccc33
aa
/b222
aa
/b222/cc22
aa
/b222/ccc11
aa
/b222/ccc33
[root@localhost ~]
#

            我们现在来尝试使用最后的action,上面显示的这么多目录,我们用ls -l来显示它们的详细信息

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
[root@localhost ~]
# find aa -type d -exec ls -l {} \;
total 12
-rw-r--r--. 1 root root    0 Feb 24 19:31 _file
-rw-r--r--. 1 root root    0 Feb 24 20:23 _test
drwxr-xr-x. 5 root root 4096 Feb 24 19:28 b111
drwxr-xr-x. 5 root root 4096 Feb 24 19:28 b222
drwxr-xr-x. 5 root root 4096 Feb 24 19:28 b3333
-rw-r--r--. 1 root root    0 Feb 24 19:30 file1
-rw-r--r--. 1 root root    0 Feb 24 19:31 file2
-rw-r--r--. 1 root root    0 Feb 24 19:31 file3
-rw-r--r--. 1 root root    0 Feb 24 20:23
test
total 12
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 cc22
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc11
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc33
total 0
total 0
total 0
total 12
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 cc22
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc11
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc33
total 0
total 0
total 0
total 12
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 cc22
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc11
drwxr-xr-x. 2 root root 4096 Feb 24 19:28 ccc33
total 0
total 0
total 0
[root@localhost ~]
#

最后

            我也是还是初学者,刚刚接触find这个命令,还在消化之中,以后慢慢补充,欢迎大神们指教^.^

转载于:https://my.oschina.net/becaning/blog/205329

你可能感兴趣的文章
php 笔试题汇总
查看>>
能冒泡的事件
查看>>
easyui-tree 修改图标
查看>>
变频电源老化测试重要吗?需要做老化测试吗
查看>>
Linux下Nginx源码安装
查看>>
一文带你快速了解,python是如何解析XML文件
查看>>
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
云越发展,锁定问题就会越严重?
查看>>
什么样人适合学平面设计?零门槛入门工具收藏
查看>>
用户访问网页的流程原理
查看>>
FastDfs 文件系统迁移
查看>>
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
查看>>
数字格式化工具:Numeral.js 简介
查看>>
Django登录后,自动返回原操作页面的方法
查看>>
UltraEdit批量删除空行
查看>>
运行第一个容器 - 每天5分钟玩转容器技术(4)
查看>>
mysql实现vsftp虚拟用户访问
查看>>
(LNMP) How To Install Linux, nginx, MySQL, PHP
查看>>
write back vs write through
查看>>
各种链接
查看>>