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

15 个实用的 Linux find 命令示例

除了在目录结构下查找文件的基本操作外,我们还可以使用 find 命令执行一些实际操作,这将使我们的命令行之旅变得轻松。

在本文中,让我们回顾 15 个 Linux find 命令的实际示例,它们对新手和专家都非常有用。

首先,在主目录下创建以下示例空文件,从而方便尝试下面提到的一些 find 命令示例。

$ vim create_sample_files.sh
touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

mkdir backup
cd backup

touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

$ chmod +x create_sample_files.sh

$ ./create_sample_files.sh

查看运行结果如下

shell脚本创建文件

1.使用名称查找文件

这是 find 命令的基本用法。 此示例在当前目录及其所有子目录中查找名称为 MyCProgram.c 的所有文件。

$ find -name "MyCProgram.c"

find 使用名称查找文件

2.使用名称查找文件并忽略大小写

这是 find 命令的基本用法。 此示例在当前目录及其所有子目录中查找名称为 MyCProgram.c(忽略大小写)的所有文件。

$ find -iname "MyCProgram.c"

find 使用名称查找文件并忽略大小写

3.使用 mindepth 和 maxdepth 将搜索限制在特定目录级别

在从根目录开始的所有子目录下找到 passwd 文件。

$ find / -name passwd

find 命令查找 passwd文件

在根目录下找到 passwd 文件并向下一层。 (即根目录 - 1 级,一个子目录 - 2 级)

$ find / -maxdepth 2 -name passwd

find 指定目录深度级别查找passwd

找到root下两级下的 passwd 文件。 (即 root — 级别 1,以及两个子目录 — 级别 2 和 3 )

$ find / -maxdepth 3 -name passwd

find 指定目录深度级别查找passwd

找到子目录级别 2 和 4 之间的 passwd 文件。

$ find / -mindepth 3 -maxdepth 5 -name passwd

find 找到子目录级别2和4之间的passwd

4.对Find命令找到的文件执行命令

在下面的示例中,find 命令计算所有名称为 MyCProgram.c 的文件的 md5sum(忽略大小写)。 {} 替换为当前文件名。

$ find -iname "MyCProgram.c" -exec md5sum {} \;

对Find命令找到的文件执行命令

5.逆转查找结果

显示名称不是 MyCProgram.c 的文件或目录。由于 maxdepth 为 1,因此只会在当前目录下查看。

$ find -maxdepth 1 -not -iname "MyCProgram.c"

find 逆转查找结果

6.通过 inode Number 查找文件。

每个文件都有一个唯一的 inode 编号,使用它我们可以识别该文件。 创建两个具有相似名称的文件。 即一个文件末尾有一个空格。

$ touch "test-file-name"

$ touch "test-file-name " # 注意这后面的空格
[Note: There is a space at the end]

$ ls -1 test*

查看文件的结果如下

find 命令示例显示文件

从 ls 输出中,我们无法确定哪个文件末尾有空格。 使用选项 -i 可以查看文件的 inode 号,这两个文件会有所不同。

$ ls -i1 test*

ls 查看文件inode 编号

我们可以在 find 命令上指定 inode 编号,如下所示。 在此示例中,find 命令使用 inode 编号重命名文件。

$ find -inum 37945133 -exec mv {} new-test-file-name \;

$ ls -i1 *test*

find 通过 inode 编号查找文件

当我们想对命名不佳的文件进行一些操作时,我们可以使用此方式,如下例所示。 例如,名称为 - file?.txt 的文件中包含一个特殊字符。 如果我们尝试执行 rm file?.txt,以下三个文件都将被删除。 因此,请按照以下步骤仅删除“file?.txt”文件。

$ ls
file1.txt  file2.txt  file?.txt

查找每个文件的 inode 号。

$ ls -i1

ls 查看文件inode编号

使用 inode 编号删除其中包含特殊字符的文件,如下所示。

$ find -inum 37945122 -exec rm {} \;

find 命令按照inode编号查找删除文件

7.根据文件权限查找文件

可以进行以下操作。

  • 查找与确切权限匹配的文件
  • 检查给定的权限是否匹配,而不考虑其他权限位
  • 通过给出八进制/符号表示进行搜索

对于此示例,让我们假设该目录包含以下文件。 请注意,这些文件的文件权限是不同的。

$ ls -l

ls 命令查看文件权限

查找对组具有执行(x)权限的文件。 使用以下命令在我们的主目录中查找可执行的所有文件,而不管该文件的其他权限。

$ find . -perm -g=x -type f -exec ls -l {} \;

find 查找具有可执行权限的文件

查找仅对组具有读取权限的文件。

$ find . -perm g=r -type f -exec ls -l {} \;

查找仅对组具有读取权限的文件 [按八进制搜索]

$ find . -perm 040 -type f -exec ls -l {} \;

8.在你的主目录及其子目录中查找所有空文件(零字节文件)

以下命令输出的大多数文件将是其他应用程序创建的锁定文件和占位符。

$ find ~ -empty

仅列出我们的主目录中的所有空文件。

$ find . -maxdepth 1 -empty

仅列出当前目录中的非隐藏空文件。

$ find . -maxdepth 1 -empty -not -name ".*"

9.查找前 5 个大文件

以下命令将显示当前目录及其子目录中前 5 个最大的文件。 这可能需要一段时间才能执行,具体取决于命令必须处理的文件总数。

$ find . -type f -exec ls -s {} \; | sort -n -r | head -5

find 查找前 5 个大文件

10.查找前 5 个小文件

方法与查找更大的文件相同,但排序的唯一区别是升序。

$ find . -type f -exec ls -s {} \; | sort -n  | head -5

find 查找前 5 个小文件

在上面的命令中,很可能我们只会看到零字节文件(空文件)。 因此,我们可以使用以下命令列出除零字节文件之外的较小文件。

$ find . -not -empty -type f -exec ls -s {} \; | sort -n  | head -5

11.使用选项 -type 根据文件类型查找文件

仅查找套接字文件。

$ find . -type s

查找所有目录

$ find . -type d

只查找普通文件

$ find . -type f

找到所有隐藏文件

$ find . -type f -name ".*"

找到所有隐藏目录

$ find -type d -name ".*"

12.通过比较其他文件的修改时间来查找文件

显示在指定文件之后修改的文件。 以下 find 命令显示了在 test-file-name 之后创建/修改的所有文件。

$ find -newer test-file-name

find 通过比较其他文件的修改时间来查找文件

13.按大小查找文件

使用 -size 选项,我们可以按大小查找文件。

查找大于给定大小的文件

$ find ~ -size +100M

查找小于给定大小的文件

$ find ~ -size -100M

查找与给定大小完全匹配的文件

$ find ~ -size 100M

!> 注意 :- 表示小于给定大小,+ 表示大于给定大小,无符号表示精确给定大小。

14.为频繁的查找操作创建别名

如果发现某些查找操作非常有用,那么我们可以将其设为别名。 并随时执行它。

经常删除名为 a.out 的文件。

$ alias rmao="find . -iname a.out -exec rm {} \;"
$ rmao

删除 c 程序生成的核心文件。

$ alias rmc="find . -iname core -exec rm {} \;"
$ rmc

15.使用 find 命令删除大存档文件

以下命令删除超过 100M 的 *.zip 文件。

$ find / -type f -name *.zip -size +100M -exec rm -i {} \;"

使用别名 rm100m 删除所有超过 100M 的 *.tar 文件(删除 100M)。 使用类似的概念并创建别名,如 rm1grm2grm5g 以分别删除大于 1G2G5G 的文件大小。

$ alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
$ alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"
$ alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"
$ alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"

$ rm100m
$ rm1g
$ rm2g
$ rm5g

相关文章:

  • 怎么注销网站查备案/sem推广竞价
  • 勒流网站建设制作/关键词优化seo外包
  • 网站 先建设还是先等级保护备案/免费自助建站网站
  • layui做网站前端/sem网络营销
  • 自己电脑做网站用备案/优化大师app
  • 做淘宝客网站需要注意什么/百度学术官网首页
  • 一周一总结
  • Hadoop 3.x(MapReduce)----【MapReduce 框架原理 五】
  • 实验三.局域网的组建
  • 【C++】打怪升级——通关类和对象(下)
  • 基于小波的图像边缘检测,小波变换边缘检测原理
  • Git 学习笔记
  • QFramework v1.0 使用指南 工具篇:01. QFramework.Toolkits 简介
  • JS(第六课)流程控制语句
  • REACT:react-router-dom详解
  • 【AI】Best-first search (or Greedy Search) 最佳优先搜索(或贪婪搜索)
  • android手机免费无线投屏电脑方法教程步骤AirServer7
  • 【PyTorch深度学习项目实战100例】—— 基于BiGRU短期电力负荷预测方法 | 第28例