如何仅对目录使用定位


10

这会发现“ Dropnot”的各个子目录下的大量文件

$ locate Dropnot

我可以找到目录位置locate吗?(“ Dropnot”所在的目录)

因此,如果Dropnotin中/home/me/,则是唯一返回的条目。

如果是这样,最简单/最短的方法是什么?

最好是通过一个标志或符号,而不是用管道或为它加油等,但我会选择任何方式。

也许某种Dropnot $作为行尾?(但没有用)。

Answers:


5

没有选择可用于locate查找所选文件类型(如目录)的选项,但是您可以使用问题中的语法- Dropnot$查找以结尾的行Dropnot。为此,您必须使用-e选项来定位以打开POSIX正则表达式。

在这种情况下,您应该使用:

locate -e Dropnot$

重要的是您拥有的定位版本。在我的系统(Gentoo Linux)中,我有“安全定位”:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

的答案中没有--basename选项uther。该选项由GNU Locate从findutils包提供:

$ ./locate --version
locate (GNU findutils) 4.4.2

如果要将regexp与GNU Locate一起使用,则应改用-rswitch -e


1
是不是-e选择only print entries for currently existing files
phuclv

10

我已经mlocate安装好了。它是RedHat的默认发行版,因此它将在Fedora,RHEL和CentOS上。从man 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

因此,如果您运行locate -b '\Dropknot',它将仅报告具有该字符串的文件或目录。

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.

locate -b /Dropnot工作
Michael Durrant 2012年

4

使用GNU定位(其他定位实现可能有所不同):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

当参数中没有通配符时,将locate查找具有指定搜索词作为子字符串的路径。当参数是包含一个或多个通配符的外壳模式时,locate将查找完全匹配。如果您不想/Dropnot在最后输出:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

0

如果您使用RedHat,则可能安装了mlocate,而不是Secure Locate。在这种情况下,没有-e选项,您必须使用-r或--regexp来使用基本正则表达式进行搜索。


0

Slackware slocate默认使用,它有一个带有选项的正则表达式搜索r :

locate -r '/Dropnot$'

将搜索名为的目录Dropnot

这将搜索例如,对于编号 -only Dropnot目录(Dropnot1,Dropnot2等):

locate -r '/Dropnot[[:digit:]]\+$'

0

不知道为什么没人提出这样的建议:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

这只是检查是否有定位字符串是目录并打印它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.