当前位置: 首页 > article >正文

Linux命令 | 常用命令之 find

  目录

一、基本概念

二、语法形式及常用参数

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” 的文件。 

[root@localhost go]# touch readme.md
[root@localhost go]# find . -name "*README.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
[root@localhost go]# 

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

[root@localhost go]# find . -iname "*ME.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
./readme.md
[root@localhost go]#

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

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

3.2 -type 参数

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

[root@localhost go]# find . -type d -name "*src"
./src
./src/cmd/api/testdata/src
./src/cmd/go/testdata/modlegacy/src
./src/cmd/internal/src
./src/cmd/link/testdata/testPErsrc
./src/go/build/testdata/withvendor/src
[root@localhost go]#

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

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

[root@localhost go]# find . -type f -name "*src"
./src/cmd/compile/internal/syntax/testdata/issue20789.src
./src/cmd/compile/internal/syntax/testdata/issue23385.src
./src/cmd/compile/internal/syntax/testdata/issue23434.src
./src/cmd/compile/internal/syntax/testdata/issue31092.src
./src/cmd/compile/internal/syntax/testdata/sample.src
./src/go/parser/testdata/commas.src
./src/go/parser/testdata/issue11377.src
./src/go/parser/testdata/issue23434.src
……

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

3.3 -ctime 参数

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

[root@localhost account]# ls
pacct
[root@localhost account]# touch testCtime
[root@localhost account]# find . -ctime -1
.
./testCtime
[root@localhost account]#

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

3.4 -cnewer 参数

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

[root@localhost go]# touch testOne
[root@localhost go]# touch testTwo
[root@localhost go]# mkdir testdir
[root@localhost go]# find . -cnewer testOne
.
./testTwo
./testdir
[root@localhost go]#

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

3.5 -exec/-ok 参数

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

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

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

[root@localhost go]# find . -name "README.md" -ok ls -l {} \;
< ls ... ./README.md > ? y
-rw-r--r--. 1 root root 1607 9月  10 00:57 ./README.md
< ls ... ./misc/trace/README.md > ? y
-rw-r--r--. 1 root root 5066 9月  10 00:57 ./misc/trace/README.md
< ls ... ./src/cmd/compile/README.md > ? y
-rw-r--r--. 1 root root 5655 9月  10 00:57 ./src/cmd/compile/README.md
< ls ... ./src/cmd/compile/internal/ssa/README.md > ? y
-rw-r--r--. 1 root root 7945 9月  10 00:57 ./src/cmd/compile/internal/ssa/README.md
< ls ... ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md > ? y
-rw-r--r--. 1 root root 2834 9月  10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
< ls ... ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md > ? y
-rw-r--r--. 1 root root 98 9月  10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
< ls ... ./src/cmd/vendor/golang.org/x/sys/unix/README.md > ? N
< ls ... ./test/README.md > ? N
[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

 

http://www.lryc.cn/news/2415107.html

相关文章:

  • 字符串函数---strstr()、memchr()、strchr()详解及实现
  • 【数据结构】树(一)—— 树的基础知识(C语言版)
  • CDSN文章转载方法
  • Git从入门到熟练第十讲 cloning
  • Mac安装brew,支持m芯片,5分钟安装成功亲测有效
  • 浅谈网络共享之samba服务
  • CSS预处理语言~~Less安装与使用
  • Java的byte类型详解
  • ICMP协议与ARP协议
  • unity基础(2)——3D对象基础概念与简单操作
  • 发现数学之美--微积分的起源和用途(一文搞懂微积分)
  • QEMU简介
  • 基于微信PC端小程序抓包方法
  • Hex文件解析
  • 超详细一文到底!软件测试基本流程
  • 富文本编辑器汇总
  • 一篇了解使用springSecurity
  • jar包的概念及作用(二)运行jar包、查看jar包内容
  • 推荐开源项目:NSFW Filter — 图片安全性智能检测库
  • 【机器学习】SGD,SGDM,NAG,Adagard,AdaDelta,RMSpro,Adam原理
  • 【Python/绘图】python绘图
  • [计算机效率] 文件搜索工具:Listary(附详细使用教程)
  • IO的详细介绍
  • CPP/C++学习笔记01
  • Evaluation中Percision和Recall的理解
  • Animation 开源项目教程
  • SonarQube代码质量检查平台
  • 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
  • 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
  • Dev-C++/Cpp使用入门详解