Linux命令 | 常用命令之 find

举报
Linux猿 发表于 2021/08/05 00:25:43 2021/08/05
【摘要】   目录 一、基本概念 二、语法形式及常用参数 2.1 语法形式 2.2 常用参数 三、实例讲解 3.1 -name/-iname 参数 3.2 -type 参数 3.3 -ctime 参数 3.4 -cnewer 参数 3.5 -exec/-ok 参数  四、总结 五、参考文献 我们在使用 Linux 的时候,查找文...

  目录

一、基本概念

二、语法形式及常用参数

2.1 语法形式

2.2 常用参数

三、实例讲解

3.1 -name/-iname 参数

3.2 -type 参数

3.3 -ctime 参数

3.4 -cnewer 参数

3.5 -exec/-ok 参数

 四、总结

五、参考文献


我们在使用 Linux 的时候,查找文件经常使用的一个命令就是 find,了解 find 的功能以及使用可以加强工作效率,下面结合具体实例介绍下 find 的用法。

一、基本概念

find 命令用于在指定目录及子目录下查找文件(指普通文件和目录)。

二、语法形式及常用参数

2.1 语法形式

find [path...] [expression]

其中,path 为查找路径,多个 path 使用空格分隔;expression : 由选项和动作组成。

2.2 常用参数

-name pattern : 根据指定模式查找文件;

-iname pattern : 同-name 参数,区别是不区分大小写;

-type c :根据文件类型 c 查找文件;

其中:c 代表文件类型,可取值为:

          d : 目录;

          f : 普通文件;

          l : 符号链接;

          s : 套接字;

          c : 特殊字符文件;

          b : 特殊块文件;

          p : 命令管道(FIFO)

-ctime n : 查找过去 n 天内修改过的文件;

-cnewer file :  查找比文件 file 更新的文件(“更新”:指的是修改时间);

-exec commond {} \; : 对查找到的文件执行该参数所列出的 shell 命令,注意 {}和 \之间有一个空格;

-ok commond {} \; : 功能以及参数模式同 -exec,但是每次执行 commond 都会询问用户是否执行,输入 Y/N 选择。

三、实例讲解

3.1 -name/-iname 参数

首先,在当前目录下创建文件 readme.md,然后查找文件名符合模式 “*README.md” 的文件。 


  
  1. [root@localhost go]# touch readme.md
  2. [root@localhost go]# find . -name "*README.md"
  3. ./README.md
  4. ./misc/trace/README.md
  5. ./src/cmd/compile/README.md
  6. ./src/cmd/compile/internal/ssa/README.md
  7. ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
  8. ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
  9. ./src/cmd/vendor/golang.org/x/sys/unix/README.md
  10. ./test/README.md
  11. [root@localhost go]#

 从上面的例子中可以看到,满足pattern为 “*README.md” 的文件都被查找出来了,但是小写的文件 readme.md 没有被查询出来。下面看下换成参数 -iname 的结果:


  
  1. [root@localhost go]# find . -iname "*ME.md"
  2. ./README.md
  3. ./misc/trace/README.md
  4. ./src/cmd/compile/README.md
  5. ./src/cmd/compile/internal/ssa/README.md
  6. ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
  7. ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
  8. ./src/cmd/vendor/golang.org/x/sys/unix/README.md
  9. ./test/README.md
  10. ./readme.md
  11. [root@localhost go]#

可以看到,小写的文件 readme.md 也被查找出来了,这就是 -name 和  -iname 的区别。

PS: 在 Linux 中 i 参数经常代表命令不区分大小写的意思。

3.2 -type 参数

查找所有名字为 “*src” 的目录。 


  
  1. [root@localhost go]# find . -type d -name "*src"
  2. ./src
  3. ./src/cmd/api/testdata/src
  4. ./src/cmd/go/testdata/modlegacy/src
  5. ./src/cmd/internal/src
  6. ./src/cmd/link/testdata/testPErsrc
  7. ./src/go/build/testdata/withvendor/src
  8. [root@localhost go]#

从上面的例子可以看到,所有符合模式 “*src” 的目录都被显示出来了,没有列出符合条件的普通文件。 

 查找所有名字为 “*src” 的文件。


  
  1. [root@localhost go]# find . -type f -name "*src"
  2. ./src/cmd/compile/internal/syntax/testdata/issue20789.src
  3. ./src/cmd/compile/internal/syntax/testdata/issue23385.src
  4. ./src/cmd/compile/internal/syntax/testdata/issue23434.src
  5. ./src/cmd/compile/internal/syntax/testdata/issue31092.src
  6. ./src/cmd/compile/internal/syntax/testdata/sample.src
  7. ./src/go/parser/testdata/commas.src
  8. ./src/go/parser/testdata/issue11377.src
  9. ./src/go/parser/testdata/issue23434.src
  10. ……

从上面的例子可以看到,所有符合模式“*src”的普通文件都被查找出来了,并不包含目录。 

3.3 -ctime 参数

 首先,在 /var/account 下先创建 testCtime 文件,然后在当前目录下查找最近一天修改过的文件。


  
  1. [root@localhost account]# ls
  2. pacct
  3. [root@localhost account]# touch testCtime
  4. [root@localhost account]# find . -ctime -1
  5. .
  6. ./testCtime
  7. [root@localhost account]#

从上面可以看到,"." 和 testCtime 都被查找出来了,其中,“.”  代表当前目录。

3.4 -cnewer 参数

首先,创建两个文件 testOne 和 testTwo,再创建一个目录 testdir,查找比 testOne 新的文件。


  
  1. [root@localhost go]# touch testOne
  2. [root@localhost go]# touch testTwo
  3. [root@localhost go]# mkdir testdir
  4. [root@localhost go]# find . -cnewer testOne
  5. .
  6. ./testTwo
  7. ./testdir
  8. [root@localhost go]#

从上述查询结果可以看出,可以查询出比 testOne 更新的文件

3.5 -exec/-ok 参数

在当前目录及子目录下查找符合模式 “README.md”的文件,查出的结果执行命令 ls -l 。 


  
  1. [root@localhost go]# find . -name "README.md" -exec ls -l {} \;
  2. -rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
  3. -rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
  4. -rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
  5. -rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
  6. -rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
  7. -rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
  8. -rw-r--r--. 1 root root 8678 9月 10 00:57 ./src/cmd/vendor/golang.org/x/sys/unix/README.md
  9. -rw-r--r--. 1 root root 577 9月 10 00:57 ./test/README.md
  10. [root@localhost go]#

同上,将参数由 -exec 改为 -ok,执行如下: 


  
  1. [root@localhost go]# find . -name "README.md" -ok ls -l {} \;
  2. < ls ... ./README.md > ? y
  3. -rw-r--r--. 1 root root 1607 910 00:57 ./README.md
  4. < ls ... ./misc/trace/README.md > ? y
  5. -rw-r--r--. 1 root root 5066 910 00:57 ./misc/trace/README.md
  6. < ls ... ./src/cmd/compile/README.md > ? y
  7. -rw-r--r--. 1 root root 5655 910 00:57 ./src/cmd/compile/README.md
  8. < ls ... ./src/cmd/compile/internal/ssa/README.md > ? y
  9. -rw-r--r--. 1 root root 7945 910 00:57 ./src/cmd/compile/internal/ssa/README.md
  10. < ls ... ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md > ? y
  11. -rw-r--r--. 1 root root 2834 910 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
  12. < ls ... ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md > ? y
  13. -rw-r--r--. 1 root root 98 910 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
  14. < ls ... ./src/cmd/vendor/golang.org/x/sys/unix/README.md > ? N
  15. < ls ... ./test/README.md > ? N
  16. [root@localhost go]#

从上述例子中可以看到,每次执行 ls -l 命令都会询问是否执行。 

 四、总结

上面列举了 find 的常用参数,需要注意 find 的查找都是递归查找,例如:在当前目录下查找,会默认查找当前目录和子目录中的文件。

五、参考文献

[1] https://www.runoob.com/linux/linux-comm-find.html

[2] https://man7.org/linux/man-pages/man1/find.1.html

 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/112093819

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。