Answers:
bat
任何地方查找文件查找/path/to/folder
名称中包含以下内容的所有文件bat
,可以使用:
find /path/to/folder -name '*bat*'
我已经引述了搜索模式*bat*
,因为如果报价被省略和文件匹配*bat*
在当前目录中,外壳将扩大*bat*
到它们的列表,并通过该给find
。那find
将无法正常工作。(\*bat\*
和"*bat*"
也行。)
要搜索您当前所在的文件夹(例如,您曾经cd
去过的文件夹).
,请像往常一样使用:
find . -name '*bat*'
要搜索整个计算机,请使用/
。要搜索主目录,请使用~
或主目录的全名。(Shell扩展~
到主目录的标准路径。)
如果你要搜索不区分大小写的,所以包含的文件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
是or运算子。
要仅查找常规文件(而不是文件夹,符号链接和特殊设备节点),可以使用-type f
。经常建议这样做,有时是很合适的方法,但通常不是您真正想要的,特别是如果您要find
自己检查输出的目的时。如果您有符号链接与您的搜索相匹配,您是否不想知道它?
如果要同时查找常规文件和符号链接,则可以使用:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
该-o
操作符使用运算符,并使用括号进行分组(必须加引号,以便外壳程序不会对其进行特殊处理;否则会出现语法错误)。
但是假设您只希望看到最终指向常规文件的符号链接(而不是指向目录,设备节点等的符号链接)。这实际上甚至更简单:使用-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
在终端。find
,locate
以及xargs
实用程序。-xtype
建议;也许ls *bat*
和-maxdepth
/ mindepth
也值得一提。
最简单的方法是运行
locate bat
这样,您可以在整个计算机中搜索文件名中包含“ bat”的文件
刷新PC上运行的文件列表
updatedb
最近将新文件添加到帐户时,请运行此命令
updatetdb
updatedb
比上次手动或自动运行的上次更新的文件新),sudo updatedb
需要先运行,是的。
bat
。
find /
作为locate
从数据库中搜索,而find
递归列表/
,然后正则表达式匹配。
如果文件在当前目录中,请使用:
$ 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*'
的*
意思是“任何字符(S)”,因此搜索是寻找bat
与任何字符,包括没有,之前或之后。在/
从根目录递归搜索,你可以使用.
,这将在当前目录下,或者,你想从搜索的绝对路径进行递归搜索。看看如何在Linux Shell脚本中使用正则表达式搜索文件
-type f
,这不仅仅是简单地排除目录,而且通常不是用户真正想要的,这是它的强项。