使用命令行按名称查找文件
我想使用命令行确定文件的位置。 我试过了:
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 updatedb
。 updatedb
通常每天在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_*