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

22

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

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

ls -R | grep settings.xml

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

SSH
источник
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.

user.dz
источник
@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

X Тянь
источник
4
Добавление 2>/dev/nullк концу команды подавит все сообщения об ошибках (путем перенаправления stderr на нулевое устройство).
Таннер Светт
2
-xdev: Не спускать каталоги на другие файловые системы.
Пабло А
1

Пример:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml
octopusb
источник
0

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

tree -f / | grep settings.xml

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

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

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

Параметры -la выводят также длинную версию ls и каталоги. ls -la | grep settings.xml

Эудженио Ф. Мартинес Пачеко
источник
2
Это все равно не даст вам полный путь к данному файлу.
Кусалананда