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ę?


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.


@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


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

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 -!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.