Как найти путь к файлу на основе его имени?


22

Я пытаюсь найти settings.xmlфайл на моей машине с Ubuntu. Я понятия не имею, где он находится, и в каком каталоге он находится.

Я пытался использовать это -

ls -R | grep settings.xml

Но он не показывает мне полный путь, где он находится. Есть ли какая-либо другая команда, которую мне нужно попробовать, которая может дать мне полный путь?


4
Всякий раз, когда вы думаете, что решение состоит в том, чтобы проанализировать вывод ls, вы почти наверняка делаете это неправильно .
Тердон

Ответы:


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 будут напечатаны.

При первом запуске может потребоваться: updatedb(как root) обновить / построить базу данных locate.


@terdon, ты меня удивил, я никогда не думал о том, чтобы смотреть man locateраньше! Предполагая это просто простой инструмент поиска. Большое спасибо.
user.dz

Да, это была моя реакция, когда я впервые прочитал
справочную

4
Стоит отметить роль updatedbэтой команды - locateчасто без этого, во всяком случае, для меня
rm-vanda

@ rm-vanda, я обновил ответ, чтобы упомянуть updatedb. Спасибо.
user.dz

4
locate '*/settings.xml'вероятно, более переносимо среди различных реализаций locate(где доступно).
Стефан Шазелас

15

Медленный, но устойчивый поиск в файловой системе, но окончательный.

find / -xdev -name settings.xml

Это займет некоторое время, и вы можете получить некоторые ошибки в разрешении, но это произойдет. Если у вас есть еще идеи, где он может быть, измените первый каталог с /на/where/you/guess


4
Добавление 2>/dev/nullк концу команды подавит все сообщения об ошибках (путем перенаправления stderr на нулевое устройство).
Таннер Светт

2
-xdev: Не спускать каталоги на другие файловые системы.
Пабло А


0

Дерево - это еще один хороший способ, если вы не уверены точно, что ищете, и кажется, что оно немного быстрее:

tree -f / | grep settings.xml

Другие полезные флаги: -iна grep будет игнорировать регистр, -hдля человека читаемое на дереве -

- на странице руководства есть много полезных опций -!


6
Не очень хорошая идея, tree(1)показывает дерево файлов ASCII-искусства, которое затем искажается grep(1).
vonbrand

1
Да, если вы собираетесь использовать tree, вы также можете использовать, find . type -fкоторый будет быстрее.
Тердон

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.