Program lokalizujący przeszukuje bazę danych w poszukiwaniu wszystkich ścieżek pasujących do określonego wzorca. Baza danych bazy danych jest obliczana okresowo (zwykle co tydzień lub codziennie) i zawiera ścieżki wszystkich plików, które są publicznie dostępne .
Spróbuj mdfind zamiast zlokalizować
Zaktualizowano2:
tekst mdfind, który jest dokładniejszy. Tylko tekst mdfind daje pliki, które również zawierają tekst. - David Krmpotic
$ ls -la /var/db/locate.database -r - r - r-- 1 koło nikogo 19463861 6 kwietnia 20:08 /var/db/locate.database $ locate david.jpg / Users / david / temp /david.jpg
davidhq
1
powinieneś zaktualizować swoją odpowiedź, mdfind -name textktóra jest bardziej dokładna. Tylko mdfind textdaje pliki, które zawierają tekst, jak również.
davidhq
3
Winowajcą mogą być uprawnienia, ponieważ lokalizator najwyraźniej nie może odczytać plików, które nie są czytelne na całym świecie. Zobacz tę odpowiedź za Plundra więcej wyjaśnień.
Findutils pakiet z homebrew nie pozwalają gupdatedbi glocatepolecenia, które wydają się rozwiązać niektóre z ograniczeń z narzędzi wbudowanych.
Dziękuję Ci! ale teraz, kiedy wiem, mdutilczy warto to sprawdzić? Jednym z przypadków, o których mogę pomyśleć, jest to, że mogę ręcznie uruchomić ponowne skanowanie gupdatedb- za pomocą Spotlight nie jest to takie proste lub potrwa dłużej (indeksuje także zawartość plików). Czy są inne zalety?
davidhq
1
Ponowne indeksowanie za pomocą mdutil / spotlight może zająć trochę czasu. updatedbjest do tego szybszy. glocatewydaje się nie mieć problemu z indeksowaniem plików systemowych, podczas gdy ja mdfindignoruję ~ / Library i inne pliki systemowe. Zdecydowanie mogę znaleźć więcej trafień z glocateciągu mdfindw większości przypadków. YMMV.
VogonPoetLaureate
ok, testuję to teraz. Wydaje mi się, że znalazłem jakiś problem ... sudo gupdatedbnajpierw uruchomiłem , a następnie zapisałem glocate Radiumwynik. Potem pobiegłem gupdatedbi powiedział:, /.Trashes: Permission deniedto samo dla niektórych innych folderów. Porównałem dane wyjściowe dla obu i było tak samo! Dziwne ...
davidhq,
Z tego, co mówisz, najpierw uruchomiłeś sudo gupdatedb(uruchamiając go jako root), a następnie działałeś gupdatedbjako normalny użytkownik, który nie miałby dostępu do plików, do których użytkownik root miałby dostęp, co oznacza, że dostaniesz błędy odmowy uprawnień. Jeśli chcesz mieć kompletną bazę nazw plików dla całego systemu, kontynuuj ją jako root. To ujawnia twoje pliki innym użytkownikom w systemie, którzy mogą użyć tego glocatepolecenia. Ale jeśli jesteś jedynym użytkownikiem, powinno być dobrze.
VogonPoetLaureate
2
Jeśli chcesz przeszukać tę samą bazę danych, z której korzysta Spotlight, możesz użyć mdfindpolecenia jako alternatywy (choć nie dokładnej zamiany) dla locate:
#SEARCHPATHS="/"
w konfiguracji, to nie pomogło.-v
opcja nie wydaje żadnych dodatkowych wyników: /mdfind -name text
która jest bardziej dokładna. Tylkomdfind text
daje pliki, które zawierają tekst, jak również.Winowajcą mogą być uprawnienia, ponieważ lokalizator najwyraźniej nie może odczytać plików, które nie są czytelne na całym świecie. Zobacz tę odpowiedź za Plundra więcej wyjaśnień.
Findutils pakiet z homebrew nie pozwalają
gupdatedb
iglocate
polecenia, które wydają się rozwiązać niektóre z ograniczeń z narzędzi wbudowanych.źródło
mdutil
czy warto to sprawdzić? Jednym z przypadków, o których mogę pomyśleć, jest to, że mogę ręcznie uruchomić ponowne skanowaniegupdatedb
- za pomocą Spotlight nie jest to takie proste lub potrwa dłużej (indeksuje także zawartość plików). Czy są inne zalety?updatedb
jest do tego szybszy.glocate
wydaje się nie mieć problemu z indeksowaniem plików systemowych, podczas gdy jamdfind
ignoruję ~ / Library i inne pliki systemowe. Zdecydowanie mogę znaleźć więcej trafień zglocate
ciągumdfind
w większości przypadków. YMMV.sudo gupdatedb
najpierw uruchomiłem , a następnie zapisałemglocate Radium
wynik. Potem pobiegłemgupdatedb
i powiedział:,/.Trashes: Permission denied
to samo dla niektórych innych folderów. Porównałem dane wyjściowe dla obu i było tak samo! Dziwne ...sudo gupdatedb
(uruchamiając go jako root), a następnie działałeśgupdatedb
jako normalny użytkownik, który nie miałby dostępu do plików, do których użytkownik root miałby dostęp, co oznacza, że dostaniesz błędy odmowy uprawnień. Jeśli chcesz mieć kompletną bazę nazw plików dla całego systemu, kontynuuj ją jako root. To ujawnia twoje pliki innym użytkownikom w systemie, którzy mogą użyć tegoglocate
polecenia. Ale jeśli jesteś jedynym użytkownikiem, powinno być dobrze.Jeśli chcesz przeszukać tę samą bazę danych, z której korzysta Spotlight, możesz użyć
mdfind
polecenia jako alternatywy (choć nie dokładnej zamiany) dlalocate
:źródło