find基础入门教程,find命令入门教学

首页 > 经验 > 作者:YD1662022-11-01 02:36:31

find 命令入门

find 命令入门 列出当前目录及子目录下的所有文件 列出某个目录及子目录下的所有文件 根据文件名查找文件 忽略大小写 反向查找 组合条件查找(与) 组合条件查找(或) 只查找文件或只查找目录 同时在多个目录下查找

Linux系统中的 find 命令在查找文件时非常有用。它可以根据不同的条件来查找文件,例如文件名、拥有者、文件大小、修改时间等。这篇文章,介绍一下find 命令的基本用法。

find 命令的初级语法如下:

$ find [path] [option] [expression]

为了讲清楚如何使用,咱们举例说明。

列出当前目录及子目录下的所有文件

假设目录结构如下

find基础入门教程,find命令入门教学(1)

直接输入find命令

$ find . ./d1 ./d1/a.c ./d1/b.c ./d2 ./d2/1.c ./d2/2.c ./d3

列出某个目录及子目录下的所有文件

下面的命令表示查找当前目录下 d1 文件夹中的文件,默认列出所有文件。

$ find d1 d1 d1/a.c d1/b.c

根据文件名查找文件

我猜这个是用的最多的。

假设目录结构如下

find基础入门教程,find命令入门教学(2)

查找./d2目录下文件名称中带有hello的文件。

$ find ./d2 -name "*hello*" ./d2/hello.c ./d2/hello_world.c

注意:命令中的*是通配符。另外,所有的文件夹都会被递归查找。

如果我们把路径指定为/(根目录),就会搜索整个文件系统(时间很长),所以请小心使用。当然,随时可以通过按下Ctrl C来终止命令。

注意:当指定文件夹的时候(例如示例中的./d2文件夹),忽略末尾的斜杠是没有问题的。但是,如果文件夹是一个指向其它位置的链接,那就必须在末尾写上斜杠,比如./d2/

忽略大小写

在上面的例子中,结果是没有Hello.c的。如果还要把这个文件找出来,就要指定忽略大小写——在name前面加上字母i(表示 ignore)。

find ./d2 -iname "*hello*" ./d2/Hello.c ./d2/hello.c ./d2/hello_world.c

非常建议用双引号或单引号括住要匹配的模式(比如例子中的文件名)。不这样做的话有时也能正常工作,但有时会产生奇怪的结果。

反向查找

除了查找满足条件的文件之外,我们还可以查找不满足条件的。比如我们要查找满足条件A但是不满足条件B的文件。

还是刚才的目录结构

find基础入门教程,find命令入门教学(3)

假设我们要查找名称中不含有字符串hello的文件,那么需要在-name的前面加上-not。

find ./d2 -not -name "*hello*" ./d2 ./d2/Hello.c ./d2/hell.c ./d2/world.c

我们也可以使用感叹号 !(可以理解为“非”) 来代替 -not。

$ find ./d2 ! -name "*hello*" ./d2 ./d2/Hello.c ./d2/hell.c ./d2/world.c

组合条件查找(与)

我们可以查找同时满足多个条件的文件。比如要查找文件名中含有字符串hello但是不含有字符串world的文件。

find ./d2 -name "*hello*" ! -name "*world*" ./d2/hello.c

组合条件查找(或)

当我们使用多个查找条件时, find 命令会把每个条件通过 -a(and)操作符结合起来。也就是说,只有同时满足所有条件的文件才会被列出。如果我们要查找满足条件A或者满足条件B的文件,需要使用 -o(or) 开关。

比如要查找文件名中含有字符串hello或含有字符串world的文件。

find ./d2 -name "*hello*" -o -name "*world*" ./d2/hello.c ./d2/hello_world.c ./d2/world.c

只查找文件或只查找目录

假设目录结构如下

find基础入门教程,find命令入门教学(4)

$ find ./ -name "*hello*" ./hello ./d2/hello.c ./d2/hello_world.c

上面的查找结果既包含目录又包含文件。

用-type f选项指定只列出普通文件。

$ find ./ -name "*hello*" -type f ./d2/hello.c ./d2/hello_world.c

用-type d选项指定只列出目录。

$ find ./ -name "*hello*" -type d ./hello

类似的还有-type p(有名管道),-type c(字符设备)等。

同时在多个目录下查找

假设目录结构如下

find基础入门教程,find命令入门教学(5)

$ find ./d1 ./d2 -name "*.c" ./d1/a.c ./d1/b.c ./d2/Hello.c ./d2/hello.c ./d2/hell.c ./d2/hello_world.c ./d2/world.c

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.