命令通过仅搜索部分名称来查找文件?
假设有名字的文件:
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
区分大小写搜索,那么匹配包含BAT
, bAt
等的文件,请使用-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
。
获得详细的输出
如果未指定一个是-print
则find
默认操作。 上面给出的所有命令都与自己相同,最后添加了-print
。
find
通常用于根据找到的文件运行命令 – 通常是进行更改的命令。 但除了-print
之外,还有其他行动的目的是显示结果。 特别感兴趣的是-ls
:
find /path/to/folder -name '*bat*' -ls
这提供了有关每个文件的详细信息,采用多列格式,类似于(尽管不完全相同)运行ls file
。
进一步阅读
有关find
和查找文件的其他方法的更多信息,请参阅:
-
find
手册页 ,可在线访问或通过运行man find
在终端中man find
。 - GNU findutils参考手册 ,提供有关
find
,locate
和xargs
实用程序的大量文档。 - 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.