1.What is find?
在linux当中用于文件搜索的命令主要用两个,一个是locate,另一个就是find。我们平常使用最多就是find命令,现在我们就来一步步学习find命令,刚刚接触到find命令的同学可能会觉得这个命令有些难度,不错,相比其他的一些常规命令,这个命令学习起来确实有一点点难度,主要是因为这个命令的选项和参数比较多。
2.How to use find?
find命令的选项和参数确实比较多,所以刚刚接触的时候不要试图全部掌握,先学会一些简单使用规则,然后在实际应用中使用到它,然后再去学习更高端的规则,进而学习更多的参数和选项。
我们先man一下find
1 2 3 4 5 | |
看看这个手册就觉得这个命令好复杂,不过我们先忘掉它的复杂,从简单的开始
1 2 | |
我们先来解释一下这个命令的执行过程:在aa目录里搜索名字是file1的文件,搜索到之后将之打印出来
看明白这个执行过程之后就简单多了
我们看看find命令的格式:
find + [path] + [option] + [test] + [action]
path:这个不用解释,就是我们想要搜索的路径
option:这个选项是对前面的路径进行修饰的,不如常见的选项有:
搜索N层目录
不搜索其他文件系统
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 | |
再来看看这里面普通文件
1 2 3 4 5 6 | |
我们新建两个文件test,_test,那么我们现在来查找以下划线开头的文件
1 2 3 4 | |
由于_file文件比test文件先创建,_test文件比test文件后创建,所以我们一test文件做参考,有下划线开头,而且比test后创建的文件
1 2 3 | |
看看上面的这条命令,有测试条件太多,所以我用了括号包起来,这样直观一些,括号是特殊字符,记得转义哦。
我们来显示所以目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
我们现在来尝试使用最后的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 | |