使用命令行按名称查找文件

Sam*_*007 241 command-line directory find

我想使用命令行确定文件的位置。我试过了:

find . -type f -name "postgis-2.0.0"
Run Code Online (Sandbox Code Playgroud)

locate postgis-2.0.0
Run Code Online (Sandbox Code Playgroud)

无济于事。确定文件目录的命令是什么,提供它的名称?

ade*_*lff 315

试试吧find ~/ -type f -name "postgis-2.0.0"

使用.只会搜索当前目录。 ~/将搜索您的整个主目录(可能是您将其下载到的位置)。如果您wget以 root 身份使用,则它可能位于其他地方,因此您可以/用来搜索整个文件系统。

祝你好运


rev*_*dj1 36

我会尝试:

sudo find / -type d -name "postgis-2.0.0"
Run Code Online (Sandbox Code Playgroud)

这 。意味着只在当前目录中搜索,如果你真的不知道,最好从 root 搜索所有内容。此外,输入 -f 表示搜索文件,而不是文件夹。添加sudo允许它在所有文件夹/子文件夹中搜索。

您的语法locate是正确的,但您可能需要运行

sudo updatedb
Run Code Online (Sandbox Code Playgroud)

第一的。不管出于什么原因,我从来没有好运locate

locate使用由updatedb. 因此,如果您下载了一个新文件,则您updatedb没有更新文件和目录数据库的可能性更大。您可以sudo updatedb在使用locate实用程序之前使用。 updatedb通常在 linux 系统上每天单独运行一次。


小智 16

其他答案很好,但我发现省略Permission denied语句给了我更清晰的答案(stderr由于未运行而省略s sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • / 可以替换为您要从中开始搜索的目录
  • fd如果您正在搜索目录而不是文件,则可以替换为
  • -iname-name如果您希望搜索区分大小写,则可以替换为
  • *如果您不想在搜索中使用通配符,可以省略搜索词中的s

另一种选择是:

find / -type f 2>/dev/null | grep "postgis-2.0.0"
Run Code Online (Sandbox Code Playgroud)

如果搜索词匹配完整文件路径中的任何位置,则这种方式将返回结果,例如 /home/postgis-2.0.0/docs/Readme.txt

  • 有 `-regex` 和 `-iregex` 开关用于使用 `Regular Expressions` 进行搜索,它们也可以找到路径提及。建议找到任何属于文件的项目(`-type f`),然后`grep` 资源消耗更大。当用户无权访问文件或文件夹时,会发生“权限被拒绝”,在 find 之前使用 sudo 将允许 find 查看所有文件。 (2认同)

Mit*_*tch 15

find 是最有用的 Linux/Unix 工具之一。

尝试 find . -type d | grep DIRNAME


小智 6

尝试 find . -name "*file_name*"

  • 您可以将“.”(查看当前目录)更改为“/”(查看整个系统)或“~/”(查看主目录)。

  • 如果您不希望区分大小写,您可以将“-name”更改为“-iname”。

  • 您可以在其中将“ file_name ”(可以以任何内容开头和结尾的文件)更改为文件的确切名称。


pte*_*227 5

这应该可以简化文件的定位:

这将为您提供文件的完整路径

tree -f  / | grep postgis-2.0.0
Run Code Online (Sandbox Code Playgroud)

树以树状格式列出目录的内容。告诉-f树给出文件的完整路径。因为我们不知道它的位置或父位置,所以最好从文件系统根目录/向下递归搜索。然后我们将输出发送到 grep 以突出显示我们的单词,postgis-2.0.0