假设有以下名称的文件:
batman.c
debate.c
cricketbat.c
我应该使用什么命令以及如何使用它来通过搜索标签列出所有这些文件bat
?
答案1
bat
使用任意位置查找文件
要查找/path/to/folder
名称包含 的所有文件bat
,您可以使用:
find /path/to/folder -name '*bat*'
我有引搜索模式,*bat*
因为如果省略引号并且文件*bat*
在当前目录中匹配,则 shell 将展开*bat*
为它们的列表并传递那至find
。则find
无法正常工作。(\*bat\*
并且"*bat*"
也能工作。)
要在您当前所在的文件夹中搜索(例如,您已cd
访问过的文件夹),请.
照常使用:
find . -name '*bat*'
要搜索整个计算机,使用/
。要搜索您的主目录,请使用~
或您的主目录的全名。(外壳膨胀~
到你的主目录的完整限定路径。)
根据姓名扩大或缩小搜索范围
如果您想要不区分大小写地搜索,以便匹配包含、等的文件BAT
,bAt
请使用测试-iname
而不是测试-name
:
find /path/to/folder -iname '*bat*'
我注意到您的所有文件都以 结尾.c
。如果您只想查找这样的文件,请使用:
find /path/to/folder -name '*bat*.c'
我注意到所有文件名bat
都在后缀前面的部分的最开头或最结尾.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
。如果您没有find
使用-L
标志运行,-xtype
则在符号链接上测试链接指向的文件的类型。
find /path/to/folder -name '*bat*' -xtype f
如果你有一个指向另一个文件的符号链接,-xtype f
则会匹配它,即使它的直接的目标是另一个符号链接,而不是常规文件。这几乎总是您想要的。
人们常常认为他们想要-type f
,但实际上他们想要-xtype f
。
获取详细输出
find
如果您未指定,则 的默认操作是-print
。上面给出的所有命令都相当于-print
在末尾添加 。
find
通常用于根据找到的文件运行命令——通常是进行更改的命令。但除此之外,还有其他操作的目的是显示结果-print
。特别有趣的是-ls
:
find /path/to/folder -name '*bat*' -ls
这将以多列格式提供每个文件的详细信息,类似于(但不完全相同)您通过运行所看到的内容。ls file
进一步阅读
有关find
查找文件的更多信息和其他方法,请参阅:
- 手册
find
页man find
,可以在线访问或在终端中运行。 - 这GNU findutils 参考手册,提供有关
find
、、locate
和xargs
实用程序的详尽文档。 - 查找文件在里面Ubuntu 帮助维基, 哪个演示如何使用查找以及其他几种方法。
答案2
最简单的方法是运行
locate bat
这样,您就可以在整个计算机中搜索文件名中包含“bat”的文件
要刷新电脑上的文件列表,请运行
updatedb
当您最近向帐户添加新文件时运行此命令
答案3
打开终端并将目录更改为您想要开始搜索的目录,然后运行以下命令:
find . -name "*bat*" -type f
从当前目录启动.
find 命令。
匹配-name
字符串bat
并区分大小写。(-iname
不区分大小写)仅
搜索-type f
文件。
答案4
您需要使用带有不区分大小写文件名匹配选项的find
命令,或带有区分大小写文件名匹配选项的命令。这两个选项都允许您使用通配符名称。因此,要查找包含“bat”的任何文件名,您可以使用:-iname
-name
find / -iname '*bat*'
或者
find / -name '*bat*'
表示*
“任何字符”,因此搜索会查找bat
任何字符,包括前面或后面的字符。/
从根目录递归搜索,您可以使用.
将从当前目录递归搜索,或使用要从中搜索的绝对路径。看看如何在 Linux Shell 脚本中使用正则表达式搜索文件