linux find命令用法 Linux中find命令的用法汇总


linux find命令用法 Linux中find命令的用法汇总

文章插图
Linux系统中的 find 命令在查找文件时非常有用而且方便 。它可以根据不同的条件来查找文件,例如权限、拥有者、修改日期/时间、文件大小等等 。在这篇文章中,我们将学习如何使用 find 命令以及它所提供的选项来查找文件 。
在绝大多数Linux发行版中,你都可以直接使用 find 命令而无需进行任何安装操作 。如果你想在linux系统的命令行中变得特别高效 , 那么 find 是你必须掌握的命令之一 。
find 命令的基本语法如下:
$ find [path] [option] [expression]
一、基本用法
1. 列出当前目录和子目录下的所有文件
这个命令会列出当前目录以及子目录下的所有文件 。
$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php
该命令与以下命令效果相同
$ find .
$ find . -print
2. 查找特殊的目录或路径
下面的命令会查找当前目录下 test 文件夹中的文件,默认列出所有文件 。
$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php
下面的命令用于查找指定名称的文件 。
$ find ./test -name "abc.txt"
./test/abc.txt
也可以使用通配符
$ find ./test -name "*.php"
./test/subdir/how.php
./test/cool.php
请注意,所有的文件夹都会被递归地查找 。所以 , 这是用于查找指定扩展名文件的一种非常强大的方式 。
如果我们尝试搜索 / 文件夹,也就是根目录,就会搜索整个文件系统,包括挂载的设备以及网络存储设备 。所以请小心使用 。当然,你随时可以通过按 Ctrl + C 来终止命令 。
注意:当指定文件夹的时候(例如示例中的"./test"文件夹) , 忽略末尾的斜杠是没有问题的 。但是,如果文件夹是一个指向其它位置的链接(symlink)时,你必须在末尾写上斜杠才能使find命令正常工作(find ./test/) 。
忽略大小写
在查找文件名时,忽略大小写往往非常有用 。要忽略大小写,只需要使用 iname 选项,而不是 name 选项 。
$ find ./test -iname "*.Php"
./test/subdir/how.php
./test/cool.php
总是用双引号或单引号来包围匹配模式(文件名参数),这非常有用 。不这样做的话有时也能正常工作 , 有时也可能会产生奇怪的结果 。
3. 限制目录查找的深度
find 命令默认会递归查找整个目录树 , 而这非常消耗时间和资源 。好在目录查找的深度可以手动指定 。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth 选项来指定 。
$ find ./test -maxdepth 2 -name "*.php"
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php
第二个示例中指定了 maxdepth 为1 , 表明最多只查找一层内的子目录,也就是只查找当前文件夹 。
当我们只想在当前目录下查找 , 而不是查找整个目录树的时候 , 这个选项会特别有用 。
与 maxdepth 选项相似,还有一个选项叫做 mindepth  , 正如名字所表示的那样 , 它会至少到达第 N 层子目录后才开始查找文件 。
4. 反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件 。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了 。
$ find ./test -not -name "*.php"
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹 。我们也可以使用感叹号 ! 来代替 -not 。
find ./test ! -name "*.php"
5. 结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件 。
$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc
上面的命令查找所有以 abc 开头并且不含 .php 扩展名的文件 。这个示例展现了 find 命令自带的查找表达式是多么的强大 。
OR 操作符
当我们使用多个查找条件时, find 命令会将它们通过 AND 操作符结合起来,也就是说,只有满足所有条件的文件才会被列出 。不过,如果我们需要进行基于 OR 运算的查找时,可以加上 -o 开关 。
$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件 。
6. 只查找文件或目录
有时我们只想通过某个名字查找对应的文件或对应的目录,我们可以很容易实现这个要求 。

推荐阅读