Jak znaleźć plik we FreeBSD

14

Próbuję zlokalizować wszystkie kopie example.filenamena moim serwerze FreeBSD. Jaki jest najlepszy / najłatwiejszy / najbardziej efektywny sposób to zrobić?

Ian
źródło
1
Chociaż odpowiedzi będą podobne, możesz chcieć wyjaśnić, czy używasz Linuksa, czy FreeBSD. Nie są tym samym.
Greg Hewgill 30.04.2009
zredagowano tytuł, aby sprecyzować system operacyjny
Ian
Powinno to być prawdopodobnie oznaczone FreeBSD, ale brakuje mi reputacji.
mikl

Odpowiedzi:

18
find / -name example.filename
Cletus
źródło
2
Niezawodny, ale powolny. Czasami bardzo powoli.
dmckee --- były kot moderator
3
inne flagi „znajdź”, które mogą być odpowiednie, w zależności od potrzeby: -type f (nie zawraca sobie głowy katalogami lub dowiązaniami symbolicznymi o tej samej nazwie) -ls (aby wyświetlić szczegóły takie jak rozmiar pliku, np. jeśli pliki mają takie same nazwa, ale inna treść)
Zac Thompson
19
locate filename

Znacznie szybciej niż find, jeśli uruchamiasz usługę lokalizowania i znajduje ona tylko pliki, które istniały w czasie updatedbostatniego uruchomienia (zwykle noc przed kontrolą zadania cron).

Ty można uruchomić updatedbręcznie, ale to jeszcze wolniej niż Cletus sugerujefind , i wymaga korzeń. Czasami aktualizuję bazę danych ręcznie po zainstalowaniu kilku nowych rzeczy.

dmckee --- były kot moderator
źródło
3
Lokalizowanie działa tylko wtedy, gdy masz uruchomioną usługę budowania bazy danych lokalizacji (zapomnij, jak się nazywa). Może również cierpieć z powodu opóźnienia czasowego (w tym, że plik, którego szukasz, mógł zostać dodany od ostatniej kompilacji).
cletus
Zmiany i komentarze skrzyżowane na drucie. Chłodny. Masz oczywiście rację w obu przypadkach.
dmckee --- były moderator kociak
4
Jeśli znajdziesz się find /na jakimś dużym drzewie lub częściej niż raz w tygodniu, uruchomienie locateusługi jest prawdopodobnie warte zachodu, ponieważ locate(1)jest o wiele szybsze.
Drew Stephens
@cletus Running sudo periodic weeklyaktualizuje locatebazę danych. Uruchom to po każdej instalacji lub pobraniu, które może zawierać żądane pliki.
Basil Bourque
2

Jeśli masz już zlokalizowane (inaczej slocate), to

locate example.filename

locate uruchamia zadanie cron co noc, które ponownie indeksuje wszystkie pliki na twoim komputerze. Z tego powodu nie zawsze jest aktualne.

Paul Tomblin
źródło
2

Czasami chcesz znaleźć pliki na określonym poziomie katalogu. W takim przypadku wygodne może być użycie symboli wieloznacznych powłoki:

ls /data/*/example.filename

Oczywiście działa to tylko wtedy, gdy masz sztywną strukturę katalogów.

Jon Ericson
źródło
1

locate

Jak wspomniano inni, locateto szybki sposób na znalezienie pliku. To polecenie używa wstępnie skompilowanego indeksu nazw plików i folderów. Ta baza nazw jest przeszukiwana zamiast przeszukiwać system plików.

locate example.filename 

Aby nie rozróżniać wielkości liter, dodaj -i.

locate -i eXAmPle.FileName

Zaktualizuj locatebazę danych

Baza danych, z której korzysta, locatemusi być aktualna. Po zainstalowaniu lub pobraniu, który może zawierać żądany plik, musisz zaktualizować locatebazę danych.

Baza locatedanych zostanie ostatecznie automatycznie zaktualizowana przez twój system FreeBSD. Istnieje cotygodniowy zestaw prac obejmujących to zadanie. Te obowiązki są wymienione w /etc/periodic/weekly/310.locateskrypcie.

Najprostszym najbezpieczniejszym sposobem wymuszenia wczesnej aktualizacji locatebazy danych jest wymuszenie cotygodniowego zestawu zadań do wykonania teraz.

sudo periodic weekly

Lub możesz nawet zmusić wszystkie zwykłe obowiązki do wykonania. Możesz to zrobić natychmiast po skonfigurowaniu nowego systemu FreeBSD.

sudo periodic daily weekly monthly

Jeśli korzystasz z innych metod aktualizacji locatebazy danych, możesz otrzymać komunikat o niebezpieczeństwie, ujawniając nazwy wszystkich plików systemu każdemu użytkownikowi w systemie FreeBSD. Korzystanie z periodictrasy pozwala uniknąć tego problemu.

Basil Bourque
źródło
0

Jeśli masz aktualną lokalizację bazy danych, po prostu:

locate example.filename
Sophie Alpert
źródło
0

Czasami tak robię


  find . | grep example.filename

jednak prawdopodobnie bardzo nieefektywny.

Kgrad
źródło
Tak, to pasuje do wszystkiego, a następnie wyrzuca wszystko oprócz tego jednego nazwiska, którego szukałeś. Zamiast tego możesz po prostu zrobić „find -name” example.filename ”, który robi dokładnie to samo, bez uprzedniego wydrukowania wszystkiego i bez dodatkowego procesu grep.
Mihai Limbăşan