查找名称中包含字符串的所有文件

Dru*_*Dru 157 unix linux command-line locate

我一直在搜索一个命令,它将返回当前目录中包含文件名中字符串的文件.我已经看到locate,并find能找到的命令开始与一些文件first_word*或东西结束*.jpg.

如何返回文件名中包含字符串的文件列表?

例如,if 2012-06-04-touch-multiple-files-in-linux.markdown是当前目录中的文件.

我怎么能返回这个文件和其他包含字符串的文件touch?使用诸如的命令find '/touch/'

Zag*_*rax 257

用途find:

find . -maxdepth 1 -name "*string*" -print

它将找到maxdepth 1包含"string" 的当前目录中的所有文件(删除,如果你想要它递归),并将其打印在屏幕上.

如果要避免包含':'的文件,可以键入:

find . -maxdepth 1 -name "*string*" ! -name "*:*" -print

如果你想使用grep(但我认为没有必要,你不想检查文件内容)你可以使用:

ls | grep touch

但是,我再说一遍,这find是一个更好,更清洁的解决方案.

  • @Dru,如果你想要它'更短',你可以避免`-print`,因为这是默认行为和`.`,因为这是它检查的默认文件夹. (3认同)
  • @Dru,如果要避免冒号,请进行修改以涵盖此情况。find是一个非常强大的工具,它必须以某种方式“长久”。:) (2认同)
  • `找到。-name "*string*"` 也很好用。删除 `.` 会在我的一端引发错误。再次感谢@Zagoax。 (2认同)

car*_*ing 13

使用grep如下:

grep -R "touch" .
Run Code Online (Sandbox Code Playgroud)

-R意味着递归.如果您不想进入子目录,请跳过它.

-i意思是"忽视案例".您可能会发现这也值得一试.


小智 7

-maxdepth选项应该是之前-name的选项,如下图所示,

find . -maxdepth 1 -name "string" -print
Run Code Online (Sandbox Code Playgroud)

  • 您必须在“字符串”之前和之后放置 *。 (2认同)