命令通过仅搜索部分名称来查找文件?

假设有名字的文件:

batman.c debate.c cricketbat.c 

什么命令以及如何使用它来使用searchtag bat列出所有这些文件?

使用bat Anywhere查找文件

要查找名称中包含bat /path/to/folder的所有文件,可以使用:

 find /path/to/folder -name '*bat*' 

我引用了搜索模式*bat*因为如果省略引号并且文件与当前目录中的*bat*匹配,shell会将*bat*扩展为它们的列表并将其传递给find 。 然后find不行。 ( \*bat\*"*bat*"也有效。)

要搜索您当前所在的文件夹(例如,您已编辑过),请使用. , 照常:

 find . -name '*bat*' 

要搜索整个计算机,请使用/ 。 要搜索主目录,请使用~或主目录的全名。 ( shell将~扩展到主目录的完全限定路径。)

根据名称扩大或缩小搜索范围

如果bAt区分大小写搜索,那么匹配包含BATbAt等的文件,请使用-iname测试而不是-name测试:

 find /path/to/folder -iname '*bat*' 

我注意到你的所有文件都以.c结尾。 如果您只想查找类似的文件,请使用:

 find /path/to/folder -name '*bat*.c' 

我注意到你的所有文件名都在.c后缀之前的部分的开头或最后都有。 如果你想避免匹配像embattled.c这样的文件,你可以使用:

 find /path/to/folder -name '*bat.c' -o -name 'bat*.c' 

-o运营商。

仅匹配文件

要仅查找常规文件 – 而不是文件夹,符号链接和特殊设备节点 – 您可以使用-type f 。 这经常被推荐,有时候非常合适…但往往不是你真正想要的 ,特别是如果你为了自己检查输出而运行find 。 如果您有符合搜索条件的符号链接 ,您不想知道它吗?

如果要查找常规文件和符号链接,可以使用:

 find /path/to/folder -name '*bat*' \( -type f -o -type l \) 

它使用-o运算符和括号进行分组(必须引用它以便shell不会特别处理它们;否则会出现语法错误)。

但是假设您只想看到最终指向常规文件的符号链接(而不是指向目录,设备节点等的符号链接)。 这实际上更简单:使用-xtype而不是-type 。 如果您没有使用-L标志运行find-xtype符号链接上的-xtype将测试链接指向的文件类型。

 find /path/to/folder -name '*bat*' -xtype f 

如果你有一个符号链接到文件的另一个符号链接, -xtype f将匹配它,即使它的直接目标是另一个符号链接而不是常规文件。 这几乎总是你想要的。

通常人们认为他们想要-type f ,但实际上他们想要-xtype f

获得详细的输出

如果未指定一个是-printfind默认操作。 上面给出的所有命令都与自己相同,最后添加了-print

find通常用于根据找到的文件运行命令 – 通常是进行更改的命令。 但除了-print之外,还有其他行动的目的是显示结果。 特别感兴趣的是-ls

 find /path/to/folder -name '*bat*' -ls 

这提供了有关每个文件的详细信息,采用多列格式,类似于(尽管不完全相同)运行ls file

进一步阅读

有关find和查找文件的其他方法的更多信息,请参阅:

  • find手册页 ,可在线访问或通过运行man find在终端中man find
  • GNU findutils参考手册 ,提供有关findlocatexargs实用程序的大量文档。
  • Ubuntu中的 FindingFiles 帮助wiki ,它展示了如何使用find以及其他几种方法。

最简单的方法就是跑步

 locate bat 

这样,您可以在整个计算机中搜索文件名中包含“bat”的文件

刷新PC运行中的文件列表

 updatedb 

最近在帐户中添加了新文件后运行此命令

打开终端并将目录更改为要开始搜索的目录,然后运行以下命令:

 find . -name "*bat*" -type f 

这个. 从当前目录启动find命令。
-name匹配字符串bat并区分大小写。 ( -iname不区分大小写)
-type f仅搜索文件。

如果文件在当前目录中,则使用:

 $ ls *bat* batgirl.c batman.c batwoman.c cricketbat.c 

或者(逐行):

 $ ls -1 *bat* batgirl.c batman.c batwoman.c cricketbat.c 

如果要在系统中搜索该文件,请使用:

 $ find / -name "*bat*" /path/to/cricketbat.c /path/to/batgirl.c /path/to/batwoman.c /path/to/batman.c 

您希望使用find命令,使用-iname选项进行不区分大小写的文件名匹配,或使用-name选项进行区分大小写的文件名匹配。 这两个都可以让你使用通配符名称。 因此,要查找包含“bat”的任何文件名,您将使用:

 find / -iname '*bat*' 

要么

 find / -name '*bat*' 

*表示“任何字符”,因此搜索在其之前或之后查找包含任何字符的bat ,包括none。 /递归地从根目录中搜索,您可以使用. 它将从当前目录递归搜索,或者从中搜索的绝对路径。 看看如何在linux shell脚本中使用正则表达式搜索文件

使用旧的find

 find  -type f -iname "*bat*" 

例如。:

 % find . -type f -iname "*bat*" ./batgirl.c ./batwoman.c ./cricketbat.c ./batman.c 

man find

 -type c File is of type c: [..] d directory [..] f regular file [..] -iname pattern Like -name, but the match is case insensitive.