迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

15 个实用的 Linux find 命令示例

作者:迹忆客 最近更新:2022/10/15 浏览次数:

除了在目录结构下查找文件的基本操作外,我们还可以使用 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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

在 Linux 中计算文件中的唯一行

发布时间:2023/05/04 浏览次数:70 分类:操作系统

计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便