原文: How to Search Files Effectively in the Linux Terminal
你是否曾经为在电脑上手动搜索文件而感到沮丧?如果你是一名开发人员或 DevOps 工程师,在没有 GUI 的 Linux 服务器上工作,来回浏览寻找文件会很困难。
很多人都不知道 Linux 终端的力量。Linux 有一个令人难以置信的强大的命令行,可以让你在几分之一秒内搜索文件和目录。
无论你是初学者还是专家,如果你想把你的文件管理技能提高到一个新的水平,你来到了正确的地方。这篇文章将帮助你了解 Linux 中最常用的 find 命令的基本知识。
Linux 中的 find 命令是什么
find
命令允许你在你的计算机上搜索文件和目录。它可以灵活地搜索特定目录中的文件,或通过所有子目录进行递归搜索。
让我们来探索 find
命令的力量。
如何按名称搜索文件
假设你在某个地方保存了一个叫 hello_world.html
的文件,你甚至不记得目录名称。但你的老板要求你立即把文件发给他们。
通常情况下,如果你忘记了你存储文件的位置,你会开始翻阅一个又一个文件夹,检查文件是否存在。
这时,find
命令就发挥了巨大的作用。与其在你的计算机上手动搜索文件,你可以使用 find
命令来自动完成这一过程。
通过使用 -name
标志传递文件的名称,find
命令搜索并返回文件的位置。
但请记住,-name
标志执行的是大小写敏感的搜索。如果你想进行不区分大小写的搜索,你可以使用 -iname
标志来代替。
在某些地方,你也可以用 find
命令来替代 ls
命令。我们假设你需要找到所有以 .txt
为扩展名的文件。你可以使用正则模式(*.txt
)用 find
命令来实现。
这个命令将列出你当前目录及其子目录中的所有 .txt
文件。
如果要搜索某个特定目录和子目录中的 .txt
文件,你可以用你的目录的路径替换 /path/to/search
。
如何在 Linux 中搜索一个目录
通过在 find
命令中的 -type
参数中传递 d
,可以搜索一个目录。
在上面的截图中,我们正在从我们的当前目录中查找一个名为 zip
的目录。
同样,-type
选项接受其他参数选项,以简化我们的查找过程。
f
查找常规文件的列表b
查找块状设备的列表c
查找字符设备的列表l
查找符号链接的列表s
查找套接字的列表p
查找命名的管道
如何在 Linux 中按大小搜索文件
在 find
命令中加入 -size
选项可以帮助你根据大小来查找文件。在 size 前加一个 +
或 -
,分别代表大于和小于。
在上面的截图中,我们正在查找所有大小大于 1GB 的文件。
你也可以搜索属于特定大小范围内的所有文件。
例如,如果你想找到所有大于 50MB 和小于 100MB 的文件,你可以运行以下命令:
你可以用你喜欢的记号来指定大小。一些可用的符号是:
- K 代表 KB
- M 代表 MB
- G 代表 GB
- b 代表字节
- c 代表块
如何根据修改时间来搜索一个文件
每个文件都有一个与之相关的创建和最后更新时间。让我们假设你的目录中有成千上万的文件。你在过去几天里编辑了一个文件,但忘记了它的名字。你肯定在那之后你只编辑了几个文件。
在这种情况下,你可以找到过去 7 天内修改过的所有文件。这将你的搜索从 1000 多个文件限制到一个更容易管理的数量。运行该命令后,你能在几秒钟内找到你编辑的文件。
这可以通过在 find
命令中传递 -mtime
参数来实现。
让我们假设另一种情况,今天的日期是 2023 年 2 月 10 日。你在 2023 年 2 月 3 日之前修改了一个文件。2023 年 2 月 3 日之后,你修改了很多文件。你必须找到你在 2023 年 2 月 3 日之前修改的文件。所以,基本上,你需要 2023 年 2 月 3 日之前修改过的文件。
很奇怪的场景,对吗?
但是,你也可以使用 find
命令运行这个查询。你可以通过将负号(-)与正号(+)交换来实现。
下面是为你修改的命令:
如何对从 find 命令中筛选出来的文件执行一个命令
这个问题可能会让你感到困惑。在揭晓答案之前,让我们通过一个真实的场景来清楚地了解这个问题。
假设你在一个目录中有 1000 个文件,运行 find
命令返回 20 个匹配文件。你想把这 20 个文件移到另一个目录中。你怎样才能实现这个目标呢?
简单地说,我们必须对每个被过滤的文件运行一个命令。
你可以通过在 find
命令中传递 -exec
选项来做到这一点。
-exec
选项对搜索中发现的每个文件执行一条命令。-exec
选项后面是一个命令和它的参数,其中的 {}
符号代表被处理文件的路径。
为了表示 -exec
命令的结束,我们必须添加 \;
(一个反斜杠和一个分号)。
下面是语法:
让我们试着把过滤后的文件从 5minslearn
目录移到 zip
目录。
下面是命令:
find ./5minslearn -name "*.zip" -exec mv {} ./5minslearn/zip \;
这个命令在 ./5minslearn
目录下搜索所有以 .zip
结尾的文件,然后将每个文件移到 ./5minslearn/zip
目录下。
-exec
选项允许你对找到的文件进行一系列的操作。你可以用复制、删除、甚至改变文件权限的命令来代替上面例子中的移动命令。
如何确认对过滤的文件执行命令
如果不确定是否在每个文件上应用操作,大多数人都会选择使用这个选项。
-ok
选项与 -exec
选项类似,只是它在对每个文件执行操作之前会要求确认。这个命令对于在执行具体操作之前审核将被影响的文件是超级有帮助的。如果你不确定或不希望应用该命令,你也可以选择拒绝。
例如,这次让我们试着把 .txt
文件移到其他目录。
上述命令在 ./5minslearn
目录下搜索所有以 .txt
为扩展名的文件,然后在将每个文件移动到 ./5minslearn/text_files
目录前提示用户确认。
如果要批准该操作,请输入 yes
,如果拒绝该操作,跳到下一个文件,则输入 no
。
当你想对你所修改的文件持谨慎态度时,-ok
选项很有用,因为它允许你在执行指定的命令前检查每个文件及其位置。
如何查找文件和详细信息
find
命令中的 -ls
选项用于显示搜索中发现的文件的信息,其格式与 ls
命令相同。这个选项提供了关于文件的详细信息,例如它们的权限、所有者、大小和最后修改时间。
如何查找和删除文件
你是否曾经需要查找文件并将它们从你的电脑中删除?find
命令中的 -delete
选项可以帮你做到这一点。它允许你删除符合指定条件的文件。
find . -name "*.<extension>" -delete
在上面的例子中,你可以看到 find
命令删除了扩展名为 .html
的文件。
注意:这个操作是不可逆的。当你运行删除操作时,要 100% 确定。
我建议先运行 find
命令而不要使用 -delete
标志,确保只显示需要删除的文件。一旦你确定了,你就可以执行同样的命令,加上 -delete
标志。
总结
在这篇文章中,你学会了如何使用 Linux 终端有效地搜索文件。
这些是 find
命令中非常基本的选项,我认为每个开发者都应该知道。我相信掌握基础知识是掌握更高级的 Linux 的第一步。我在我所有的博客中都涵盖了基础知识,以帮助你打下坚实的基础。
要了解更多关于 Linux 的信息,请在我的网站上订阅我的电子邮件通讯,并在社交媒体上关注我。