如何使用 find 命令来显示包含单词的文件?

如何使用 find 命令来显示包含单词的文件?

我想使用 find 命令,并且只在控制台中输出 find 命令实际找到的文件及其路径。因为如果我现在使用该命令,它还将显示它检查的所有文件。

我使用的命令是:

find idle /* > find_idle.txt

在我看来,它只是输出它搜索到的所有内容。它不会给我任何带有“空闲”的文件的点击。我是 Linux 初学者。

答案1

尝试运行:

grep -r idle /

这是有效的,但您可能会注意到一个问题。/proc例如,您不想在虚拟文件系统中搜索文件。它可能会卡住,需要很长时间,或者只包含您不感兴趣的特殊类型文件的结果。

如果您需要在 下搜索/,您需要类似:

find / -xdev -type f -exec grep -H idle '{}' +
  • /*将跳过顶层的“隐藏”文件和目录。如果你没有这样一个非常具体的目标,就不要把它放在*最后。

  • find不搜索文本文件中的字符串。它有多种选择。 find / -name idle将找到名为的文件idle并打印其完整路径。 find path-a path-b列出路径 a 和路径 b 下预期存在的所有文件。

    $ find path-a path-b
    find: ‘path-a’: No such file or directory
    find: ‘path-b’: No such file or directory
    
  • find -xdev避免进入不同的文件系统,例如/proc.如果/home是不同的文件系统,您可能需要find / /home -xdev ...改为。

  • find -type f过滤掉目录和其他一些特殊文件。

  • find -exec允许使用该文件名运行另一个程序。使用+specially一次性传递一批文件名,效率更高。

答案2

Windows 命令行和 Unix 命令行完全不同。了解 Windows 命令行实用程序对您在 Unix 上没有帮助,反之亦然。另一方面,Linux 和 macOS 等 Unix 变体之间有很多共同点,了解其中一个变体将对您了解其他变体有所帮助。

巧合的是,Windows 和 Linux 都有一个名为 的实用程序find。但他们做的事情完全不同。您的问题最初在这里没有得到很好的接受,因为没有人想象您期望调用一个命令来find搜索文件的内容。 Unixfind实用程序根据元数据搜索文件:名称、位置、修改时间等。它不查看文件内容。

搜索文件内容的 Unix 命令是grep。它的主要重点是搜索文件内部,但现代版本grep可以指示自动遍历目录并搜索其中的所有文件。要idle在当前目录中查找包含该字符串的文件:

grep idle *

*字符是通配符模式,由 shell 扩展到当前目录中的文件列表。这是在 Windows 中工作方式基本(但不完全)相同的极少数功能之一。失去这样的习惯*.*:排除名称中包含 a 的文件.(与 Windows 不同,由于历史原因,这种模式有特殊的魔力)。*确实排除点文件但这是另一个故事了。该命令不搜索子目录中的文件;要做到这一点:

grep -r idle .

在这里,我们不依赖 shell 来列出文件,因为grep它会自行完成。

如果你想在整个系统上查找文件,你可以使用

grep -r idle /

但这会搜索许多系统文件,所以你可能不想要这个。看sourcejedi的回答非常好关于这个话题。

如果您只想搜索单词“idle”,而不是当它是“idle”或“side”等单词的子字符串时,请将选项传递-wgrep

grep -w idle *

如果您想在任何情况下搜索“idle”(Idle, IDLE, iDle, ...),请传递-i

grep -i idle *

一般来说,如果您正在寻找执行某些操作的命令,网络搜索是您最好的朋友。有一些方法可以搜索系统上命令的文档,但它们通常效率较低:您必须对自己正在寻找的内容有所了解。一旦您知道命令名称,您就可以使用该命令查找其文档man,例如man grepman find。我推荐阅读如何使用手册页来学习如何使用命令?手册页通常是干巴巴的总结,假设您大致了解自己在做什么,但忘记了细节,因此请毫不犹豫地查阅其他资源。

相关内容