如何查找文件夹中文件名中包含正则表达式匹配项的所有文件?

And*_*een 5 search filenames regular-expression files

我想在 Linux(本例中为 Ubuntu)上的主文件夹中找到包含与特定正则表达式匹配的所有文件。是否有一个简单的 Unix 命令可以用来执行此操作?

例如,我想查找我的主文件夹中名称包含以下正则表达式匹配项的所有文件(此处使用 Javascript 样式表示法):((R|r)eading(T|t)est(D|d)ata)

cas*_*cas 2

grep有一个递归-r选项,它将在每个子目录中的每个文件中搜索该模式。

-l选项仅列出包含该模式的文件。如果您想要每个文件中的匹配项计数,请使用-c-l 或 -c,如果您想查看匹配项,请不要使用 -l 或 -c。

  1. (R|r)只是一种冗长的写法[Rr]。它也比类慢(但还不够重要,除非它处于运行数百万次的循环中):

    grep -lr '[Rr]eading[Tt]est[Dd]ata' ~/

  2. 完全不区分大小写:

    grep -lir 'readingtestdata' ~/

  3. 如果您只想搜索 ~ 中的文件而不是子目录中的文件,那么您可以使用find

    find ~/ -maxdepth 1 -type f -print0 | xargs -0r grep -l '[Rr]eading[Tt]est[Dd]ata'

  • 您可以使用“find ~ -maxdepth 1 -type f -exec grep -l '[Rr]eading[Tt]est[Dd]ata' {} \+”代替“xargs”。 (2认同)
  • @CraigSanders 恰恰相反!`find -exec` 从来不存在任何引用问题,但是将 `xargs` 与 `find` 一起使用仅适用于“驯服”文件名或 `-print0`/`-0`。 (2认同)