如何找到可以在linux命令行上的任何位置的文件/目录?

joh*_*ser 54 linux ksh find locate which

理想情况下,我可以使用像这样的程序

find [file or directory name]
Run Code Online (Sandbox Code Playgroud)

报告具有匹配文件名/目录的路径.不幸的是,这似乎只检查当前目录,而不是整个文件夹.

我也尝试过找到哪个,但是没有找到文件,即使我知道它在某个地方的计算机上.

Rus*_*Uhl 81

"不幸的是,这似乎只检查当前目录,而不是整个文件夹".大概你的意思是它不会在子目录中查找.要解决此问题,请使用find -name "filename"

如果有问题的文件不在当前工作目录中,您可以通过搜索整个计算机

find / -name "filename"
Run Code Online (Sandbox Code Playgroud)

这也适用于类似的东西等find / -name "*.pdf".有时候我也喜欢将它输入到grep语句中(因为,至少在我的机器上,它会突出显示结果),所以我最终会得到像

find / -name "*star*wars*" | grep star
Run Code Online (Sandbox Code Playgroud)

这样做或类似的方法只是帮助我立即找到文件名并识别它是否实际上是我正在寻找的文件.

  • 是的,前提是您使用星号.请注意,它区分大小写.如果我有一个名为STARTUP的文件,我想找到,`find/-name"*ART*"`会找到它.请注意`find/-name'*art*"`将找不到该文件,因为"art"是小写,而"STARTUP"是大写 (4认同)

And*_*rey 7

如果需要找到嵌套在一些目录中:

find / -type f -wholename "*dirname/filename"
Run Code Online (Sandbox Code Playgroud)

或连接dirs:

find / -type d -wholename "*foo/bar"
Run Code Online (Sandbox Code Playgroud)


thu*_*yen 5

find命令将花费很长时间,搜索文件的最快方法是使用locatecommand,它在索引数据库(由 command 更新)中查找文件名(和路径updatedb)。

结果将通过一个简单的命令立即出现:

locate {file-name-or-path}
Run Code Online (Sandbox Code Playgroud)

如果没有找到该命令,则需要先安装mlocate包并运行updatedb命令,以便第一次准备搜索数据库。

更多细节在这里:https : //medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

  • 使用了查找和定位解决方案,我可以确认定位要快得多 (2认同)

use*_*778 5

要摆脱权限错误(等等),您可以将stderr重定向到无处

find / -name "something" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这_实际上_回答了“我如何找到可能位于任何地方的文件”的问题。对于像我这样不了解标准文件夹结构、对输入三百个 cd 命令来查找文件不感兴趣、对搜索数百个权限被拒绝行不感兴趣的 Linux 菜鸟来说,这是完美的答案。对于我的具体情况,我试图在 SQL Server linux 中找到 sqlcmd 工具 (4认同)