如何在 linux 命令行上找到可能位于任何位置的文件/目录? [关闭]

Posted

技术标签:

【中文标题】如何在 linux 命令行上找到可能位于任何位置的文件/目录? [关闭]【英文标题】:How can I find a file/directory that could be anywhere on linux command line? [closed] 【发布时间】:2014-08-30 13:58:51 【问题描述】:

理想情况下,我可以使用像

这样的程序
find [file or directory name]

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

我也尝试了 locate 和 which,但没有找到该文件,即使我知道它在某处的计算机上。

【问题讨论】:

不确定是什么问题,因为find -name "filename" 在当前工作目录中递归查找文件。 对不起,如果不清楚,该文件可能不在当前工作目录中。它可以在计算机上的任何位置 查找/ -name 这能回答你的问题吗? finding a file on linux? 【参考方案1】:

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

如果有问题的文件不在当前工作目录中,你可以通过

搜索你的整个机器
find / -name "filename"

这也适用于find / -name "*.pdf" 等内容。有时我也喜欢将其通过管道传输到 grep 语句中(因为至少在我的机器上,它会突出显示结果),所以我最终会得到类似

find / -name "*star*wars*" | grep star

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

【讨论】:

谢谢。出于好奇,这对部分文件名有效吗? 可以,前提是您使用星号。请注意,它区分大小写。如果我想找到一个名为 STARTUP 的文件,find / -name "*ART*" 会找到它。请注意find / -name "*art*" 不会找到该文件,因为“art”是小写字母,而“STARTUP”是大写字母 @johncorser 你也应该能够使用某种 RE 来找到你需要的东西 很高兴知道!我没有意识到我可以在 find 中使用正则表达式! 速度出奇的慢。我有一台 EC2 上的临时 linux 机器,它在一分钟内找不到文件。【参考方案2】:

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

find / -name "something" 2>/dev/null

【讨论】:

谢谢,这实际上回答了“我如何找到可能在任何地方的文件”的问题。对于像我这样不了解标准文件夹结构并且对键入三百个cd 命令来查找文件不感兴趣并且对搜索数百个权限被拒绝行不感兴趣的 Linux 新手,这是完美的答案.对于我的具体情况,我试图在 SQL Server linux 中找到 sqlcmd 工具【参考方案3】:

如果需要查找嵌套在某些目录中:

find / -type f -wholename "*dirname/filename"

或连接的目录:

find / -type d -wholename "*foo/bar"

【讨论】:

我们如何在一个 find 命令中同时使用文件和目录?我正在尝试类似“find / -maxdepth 1 -type d,f”的东西,但我在命令行上收到一条消息 - “find:-type 的参数应该只包含一个字母”【参考方案4】:

find 命令需要很长时间,搜索文件最快的方法是使用locate 命令,它在索引数据库中查找文件名(和路径)(通过命令updatedb 更新)。

用一个简单的命令就会立即出现结果:

locate file-name-or-path

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

更多详情:https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

【讨论】:

使用了 find 和 locate 解决方案,我可以确认 locate 更快【参考方案5】:

我希望这篇评论能帮助你使用终端找出你的本地和服务器文件路径

 find "$(cd ..; pwd)" -name "filename"

或者只是想查看当前位置然后运行

 pwd "filename"

【讨论】:

【参考方案6】:

如果是你要找的命令文件,最快最准确的方法是用

which "commandname"

这将显示用于命令的实际文件,即使系统上有许多同名文件。

【讨论】:

OP 写道他已经尝试过which,但它对他有用。

以上是关于如何在 linux 命令行上找到可能位于任何位置的文件/目录? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Linux中如何在指定目录下查找文件?

如何在Docker命令行上的Docker注册表中找到具有特定标记的Docker镜像?

在 txt 文件 Linux 命令行上显示 php 输出

在导航栏中的单独行上对齐名字和姓氏

linux如何查找文件

在 Linux 命令行上检查 postgresql jdbc 驱动程序版本的命令是啥?