如何根据文件名查找文件的路径?


22

我正在尝试settings.xml在我的Ubuntu计算机中查找文件。我不知道它在哪里,以及它在哪个目录中。

我尝试使用此-

ls -R | grep settings.xml

但是它并没有显示完整路径。我是否需要尝试其他命令才能获得完整路径?


4
每当您认为解决方案是解析输出时ls,几乎肯定会以错误的方式进行操作
terdon

Answers:


23

对于快速搜索(但不是确定的):

locate -br '^settings.xml$'

来自man locate

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

^$确保只有文件名为settings.xml而不是文件名称中包含 settings.xml将被打印出来。

您可能需要首次运行:(updatedbroot)来更新/构建的数据库locate


@terdon,你让我感到惊讶,我从来没有想过要看man locate!!!假设它只是简单的搜索工具。非常感谢你。
user.dz 2014年

是的,这是我第一次阅读手册页时的反应:)
terdon

4
值得一提的是updatedb,此命令的作用- locate无论如何,对于我而言,经常会失败
而已

@ rm-vanda,我已更新答案以提及updatedb。谢谢。
user.dz 2014年

4
locate '*/settings.xml'在各种不同的实现中locate(可能的话)可能更容易移植。
斯特凡Chazelas

15

缓慢而稳定地搜索文件系统,但确定。

find / -xdev -name settings.xml

这将需要一些时间,并且您可能会遇到一些权限错误,但是会到达那里。如果您进一步了解它可能位于的位置,请将第一个目录从更改//where/you/guess


4
追加2>/dev/null到命令末尾将抑制所有错误输出(通过将stderr重定向到空设备)。
Tanner Swett 2014年

2
-xdev注意:不要降级其他文件系统上的目录。
巴勃罗A

1

例:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml

0

树是另一种好方法,如果不确定所要查找的是什么,它似乎会更快一些:

tree -f / | grep settings.xml

其他有用的标志: -i在grep上将忽略大小写, -h以便在树上易于阅读-

-手册页有很多有用的选项-!


6
这不是一个好主意,它tree(1)显示了文件的ASCII码艺术树,然后将其残废grep(1)
vonbrand 2014年

1
是的,如果您要使用tree,则最好使用find . type -f速度更快的方法。
terdon

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.