Jak znaleźć ścieżkę do pliku na podstawie jego nazwy?

22

Próbuję znaleźć settings.xmlplik na moim komputerze Ubuntu. Nie mam pojęcia, gdzie to jest i w jakim katalogu się znajduje.

Próbowałem tego użyć -

ls -R | grep settings.xml

Ale nie pokazuje mi pełnej ścieżki tam, gdzie jest ... Czy jest jakieś inne polecenie, które muszę wypróbować, które może dać mi pełną ścieżkę?

SSH
źródło
4
Ilekroć myślisz, że rozwiązaniem jest parsowanie wyniku ls, prawie na pewno robisz to w niewłaściwy sposób .
terdon

Odpowiedzi:

23

Szybkie wyszukiwanie (ale nie ostateczne):

locate -br '^settings.xml$'

Od 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.

^I $zapewnić, że tylko te pliki, których nazwa jest settings.xmla nie pliki, których nazwy zawierają settings.xml zostanie wydrukowany.

Być może po raz pierwszy będziesz musiał uruchomić: updatedb(as root), aby zaktualizować / zbudować bazę danych locate.

user.dz
źródło
@terdon, zaskoczyłeś mnie, nigdy nie myślałem o tym man locatewcześniej !!! zakładając, że jest to proste narzędzie wyszukiwania. Dziękuję Ci bardzo.
user.dz
Tak, to była
właściwie
4
warto zwrócić uwagę na rolę updatedbtego polecenia - locateczęsto bez tego się nie powiedzie, dla mnie tak czy inaczej
rm-vanda
@ rm-vanda, zaktualizowałem odpowiedź, aby wspomnieć updatedb. Dziękuję Ci.
user.dz
4
locate '*/settings.xml'jest prawdopodobnie bardziej przenośny wśród różnych różnych implementacji locate(jeśli są dostępne).
Stéphane Chazelas
15

Powolne, ale stałe wyszukiwanie w systemie plików, ale definitywne.

find / -xdev -name settings.xml

Może to zająć trochę czasu i możesz otrzymać błędy w pozwoleniach, ale się tam dostanie. Jeśli masz więcej pomysłów, gdzie może się znajdować, zmień pierwszy katalog z /na/where/you/guess

X Tian
źródło
4
Dołączenie 2>/dev/nullna końcu polecenia spowoduje usunięcie wszystkich danych wyjściowych błędów (poprzez przekierowanie stderr do urządzenia zerowego).
Tanner Swett
2
-xdev: Nie opuszczaj katalogów w innych systemach plików.
Pablo A
1

Przykład:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml
ośmiornica
źródło
0

drzewo to kolejny dobry sposób, jeśli nie jesteś pewien, czego dokładnie szukasz, i wydaje się być nieco szybszy:

tree -f / | grep settings.xml

Inne przydatne flagi: -ina grep zignoruje sprawę, -hdla człowieka czytelnego na drzewie -

- strona man ma wiele przydatnych opcji -!

rm-vanda
źródło
6
Nie jest to dobry pomysł, tree(1)pokazuje drzewo plików ASCII, które jest następnie okaleczane grep(1).
vonbrand
1
Tak, jeśli zamierzasz użyć tree, równie dobrze możesz użyć, find . type -fktóry będzie szybszy.
terdon
0

Parametry -la wypisują również długą wersję ls i katalogów. ls -la | grep settings.xml

Eugenio F. Martinez Pacheco
źródło
2
To nadal nie zapewni pełnej ścieżki do podanego pliku.
Kusalananda