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

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

find . -type f -name "postgis-2.0.0" 

 locate postgis-2.0.0 

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

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

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

祝好运

我会尝试:

 sudo find / -type d -name "postgis-2.0.0" 

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

您的locate语法是正确的,但您可能必须运行

 sudo updatedb 

第一。 无论出于何种原因,我locate好运。

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

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

试试吧find . -type d | grep DIRNAME find . -type d | grep DIRNAME

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

 find / -type f -iname "*postgis-2.0.0*" 2>/dev/null 

哪里:

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

另一种选择是:

 find / -type f 2>/dev/null | grep "postgis-2.0.0" 

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

这应该简化文件的定位:

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

 tree -f / | grep postgis-2.0.0 

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

试试吧find . -name "*file_name*" find . -name "*file_name*"

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

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

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

虽然find命令是以递归方式遍历目录树的最简单方法,但还有其他方法,特别是默认情况下Ubuntu附带的两种脚本语言已经能够这样做。

庆典

bash有一个非常好的globstar shell选项,它允许递归遍历目录树。 我们需要做的就是测试./**/*扩展中的项是否是文件以及它是否包含所需的文本:

 bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0 

Perl的

Perl具有Find模块,它允许执行目录树的递归遍历,并通过子例程对它们执行特定操作。 使用小脚本,您可以遍历目录树,将包含所需字符串的文件推送到数组中,然后像这样打印:

 #!/usr/bin/env perl use strict; use warnings; use File::Find; my @wanted_files; find( sub{ -f $_ && $_ =~ $ARGV[0] && push @wanted_files,$File::Find::name }, "." ); foreach(@wanted_files){ print "$_\n" } 

它是如何工作的:

 $ ./find_file.pl "postgis-2.0.0" ./testdir/texts/postgis-2.0.0 

python

Python是另一种在Ubuntu世界中使用非常广泛的脚本语言。 特别是,它有os.walk()模块,它允许我们执行与上面相同的操作 – 遍历目录树并获取包含所需字符串的文件列表。

作为单行,这可以这样做:

 $ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])' ['./testdir/texts/postgis-2.0.0'] 

完整脚本看起来像这样:

 #!/usr/bin/env python import os; for r,s,f in os.walk("."): for i in f: if "postgis-2.0.0" in i: print(os.path.join(r,i)) 

$ find . -type f | grep IMG_20171225_*

./03-05--2018/IMG_20171225_200513.jpg
命令find后的DOT是指出一个起点,
因此 – 当前文件夹,
“管道”(=已过滤)通过名称filterIMG_20171225_*