Wiem, że jest to oznaczone jako linux, ale warto o tym wspomnieć: ścieżka jest wymagana dla innych wariantów * nix, które nie są linuksem. W systemie Linux ścieżka jest opcjonalna, jeśli chcesz użyć kropki.
IslandCow
4
@Seatter „foo *” mówi find, aby szukał wszystkich plików zaczynających się od „foo”. To tylko jego przykład. Możesz użyć „gpio *”, aby znaleźć wszystkie pliki, których nazwy zaczynają się od gpio, lub po prostu „gpio1”, aby znaleźć wszystkie pliki o nazwie gpio1.
schumacher574
29
zauważ, że „foo *” jest w cudzysłowie, więc powłoka nie rozwija go przed przekazaniem go do znalezienia. jeśli właśnie to zrobiłeś find . foo*, to foo*byłoby rozwinięte, a następnie przekazane do znalezienia.
uśmiechnij się
32
Warto podkreślić, że " "jest to bardzo potrzebne do wyszukiwania rekurencyjnego.
WesternGun
3
Przydatne również: jeśli nie chcesz otrzymywać powiadomień o katalogach, do których nie masz uprawnień (lub innych błędach), możesz to zrobićfind . -name "foo*" 2>/dev/null
Jobbo
221
Pipowanie w grep jest często wygodniejsze; daje pełną moc wyrażeń regularnych do dowolnego dopasowywania symboli wieloznacznych.
Na przykład, aby znaleźć wszystkie pliki z ciągiem znaków „foo” bez rozróżniania wielkości liter:
findzawiera również -iname, -regexi -iregexflagi dla wielkości liter maska, regex i wielkości liter regex dopasowywania tak rurociągu, aby grepnie jest konieczne.
iobender
7
Nie sądzę, żeby chodziło o bycie niepotrzebnym, ale o wygodę.
Elijah Lynn
1
Jednak potokowanie do grep -v może umożliwiać użycie prostych ciągów lub wyrażeń regularnych do usunięcia niepotrzebnych wpisów.
door_number_three
3
@iobender - Niestety z doświadczenia mogę powiedzieć, że nie wszystkie systemy są wyposażone w findpolecenia obsługujące te opcje. Czasami grepstaje się jedyną opcją.
W kilku przypadkach potrzebowałem parametru -L do obsługi dowiązań katalogu symbolicznego. Domyślnie dowiązania symboliczne są ignorowane. W takich przypadkach było to dość mylące, ponieważ zmieniałem katalog na podkatalog i widziałem plik pasujący do wzorca, ale find nie zwrócił nazwy pliku. Użycie -L rozwiązuje ten problem. Opcje dowiązania symbolicznego dla find to -P -L -H
Przełącznik L jest bardzo pomocny. Wiele razy użytkownik nie ma pojęcia o bazowych katalogach, niezależnie od tego, czy są one linkami miękkimi, czy zwykłymi katalogami. W razie wątpliwości zawsze warto skorzystać z opcji L. Przynajmniej zawsze mi pomogło.
Ritesz
2
To była dla mnie odpowiedź. Dzięki!
iedmrc
33
Jeśli twoja powłoka obsługuje nową opcję globowania (można ją włączyć przez :)shopt -s globstar , możesz użyć:
echo **/*foo*
znaleźć rekursywnie dowolne pliki lub foldery. Jest to obsługiwane przez powłoki Bash 4, zsh i podobne.
Osobiście mam zdefiniowaną tę funkcję powłoki:
f(){ find .-name "*$1*";}
Uwaga: powyższą linię można wkleić bezpośrednio do powłoki lub dodać do ~/.bashrcpliku użytkownika .
Następnie mogę wyszukać dowolne pliki, wpisując:
f some_name
Alternatywnie możesz użyć fdnarzędzia o prostej składni, np fd pattern.
Pierwszy raz widziałem gif na SO od prawie 9 lat. Dobra robota!
Joshua Pinter,
1
Te wyniki wydajności wyglądają bardzo obiecująco. Możesz rozważyć dodanie fd do domowego naparu ...
Gr3go,
poza tematem: jakiego narzędzia użyłeś do stworzenia pliku svg na wersję demonstracyjną?
aprodan
2
@aprodan Obraz demonstracyjny został skopiowany z GitHub, ale sądzę, że używają asciinema, a następnie przekonwertowano na format GIF, ale nie jestem pewien.
kenorb
1
W rzeczywistości jest to format SVG, więc prawdopodobnie asciicast2vectormożna go użyć.
kenorb
27
find <directory_path>-type f -name "<wildcard-match>"
W dopasowaniu wieloznacznym możesz podać ciąg, który chcesz dopasować, np. * .C (dla wszystkich plików c)
Domyślny sposób wyszukiwania pliku rekurencyjnego i dostępny w większości przypadków to
find .-name "filepattern"
Rozpoczyna rekurencyjne przechodzenie do nazwy pliku lub wzorca z bieżącego katalogu, w którym się znajdujesz. Za pomocą polecenia find możesz używać symboli wieloznacznych i różnych przełączników, aby wyświetlić pełną listę opcji, wpisz
man find
lub jeśli strony podręcznika nie są dostępne w twoim systemie
find --help
Istnieją jednak bardziej nowoczesne i szybsze narzędzia niż znajdowanie, które przemierzają cały system plików i indeksują pliki, jednym z takich powszechnych narzędzi jest zlokalizowanie lub slocate / mlocate, powinieneś sprawdzić instrukcję swojego systemu operacyjnego, jak go zainstalować, a gdy już to zrobisz zainstalowany musi zainicjować bazę danych, jeśli skrypt instalacyjny tego nie zrobi, można to zrobić ręcznie, wpisując
sudo updatedb
I, aby użyć go do wyszukiwania określonego typu pliku
locate filename
Lub, aby wyszukać nazwę pliku lub tupot z bieżącego katalogu, możesz wpisać:
pwd | xargs -n 1-I {} locate "filepattern"
Przejrzy bazę danych plików i szybko wydrukuje nazwy ścieżek pasujące do wpisanego wzoru. Aby zobaczyć pełną listę opcji lokalizacji, wpisz:
locate --helplubman locate
Dodatkowo możesz skonfigurować lokalizację, aby aktualizowała bazę danych w zaplanowanym czasie za pomocą zadania cron, więc przykładowy cron, który aktualizuje bazę danych o 1 w nocy, wygląda następująco:
01*** updatedb
Te zadania cron muszą być skonfigurowane przez użytkownika root, ponieważ updatedb potrzebuje uprawnień roota do przechodzenia przez cały system plików.
Jestem zaskoczony, widząc, że lokalizowanie nie jest często używane, gdy mamy iść rekurencyjnie.
Najpierw zlokalizuję „$ PWD”, aby uzyskać listę plików w bieżącym folderze, a następnie uruchomię na nich greps, jak mi się podoba.
locate "$PWD"| grep -P <pattern>
Oczywiście przy założeniu, że aktualizacja jest wykonywana, a indeks jest okresowo aktualizowany. Jest to znacznie szybszy sposób na znalezienie plików niż uruchomienie znalezienia i poproszenie go o zejście z drzewa. Wspominając o tym dla kompletności. Nie ma nic przeciwko użyciu find, jeśli drzewo nie jest bardzo ciężkie.
locate "$PWD*.mp4" Wystarczy przypomnieć, że możesz być w stanie pominąćgrep
Jefferey Cave
5
Poniższe polecenie pomaga wyszukać dowolne pliki
1) Bez względu na
wielkość liter
2) Wynik Bez folderów bez pozwolenia 3) Wyszukiwanie z katalogu głównego lub ze ścieżki, którą lubisz. Zmień / z preferowaną ścieżką.
dlaczego do cholery używasz do tego grep? Wystarczy przekierować stderr na nullfind / -iname '*C*.xml' 2>/dev/null
phuclv
3
Jeśli chcesz wyszukać specjalny plik ze znakiem wieloznacznym, możesz użyć następującego kodu:
find .-type f -name "*.conf"
Załóżmy, że chcesz przeszukać wszystkie pliki .conf stąd:
.oznacza, że wyszukiwanie rozpoczęło się od tego miejsca (bieżące miejsce) -typeoznacza typ elementu wyszukiwania, którym jest plik (f). -nameoznacza, że chcesz wyszukiwać pliki o nazwach * .conf .
find . foo*
, tofoo*
byłoby rozwinięte, a następnie przekazane do znalezienia." "
jest to bardzo potrzebne do wyszukiwania rekurencyjnego.find . -name "foo*" 2>/dev/null
Pipowanie w grep jest często wygodniejsze; daje pełną moc wyrażeń regularnych do dowolnego dopasowywania symboli wieloznacznych.
Na przykład, aby znaleźć wszystkie pliki z ciągiem znaków „foo” bez rozróżniania wielkości liter:
źródło
find
zawiera również-iname
,-regex
i-iregex
flagi dla wielkości liter maska, regex i wielkości liter regex dopasowywania tak rurociągu, abygrep
nie jest konieczne.find
polecenia obsługujące te opcje. Czasamigrep
staje się jedyną opcją.find
znajdzie wszystkie pliki pasujące do wzorca:Jeśli jednak chcesz zdjęcie:
Mam nadzieję że to pomoże!
źródło
brew install tree
dla użytkowników Mac OSX bezapt-get
zainstalowanego oprogramowaniaW kilku przypadkach potrzebowałem parametru -L do obsługi dowiązań katalogu symbolicznego. Domyślnie dowiązania symboliczne są ignorowane. W takich przypadkach było to dość mylące, ponieważ zmieniałem katalog na podkatalog i widziałem plik pasujący do wzorca, ale find nie zwrócił nazwy pliku. Użycie -L rozwiązuje ten problem. Opcje dowiązania symbolicznego dla find to -P -L -H
źródło
Jeśli twoja powłoka obsługuje nową opcję globowania (można ją włączyć przez :)
shopt -s globstar
, możesz użyć:znaleźć rekursywnie dowolne pliki lub foldery. Jest to obsługiwane przez powłoki Bash 4, zsh i podobne.
Osobiście mam zdefiniowaną tę funkcję powłoki:
Uwaga: powyższą linię można wkleić bezpośrednio do powłoki lub dodać do
~/.bashrc
pliku użytkownika .Następnie mogę wyszukać dowolne pliki, wpisując:
Alternatywnie możesz użyć
fd
narzędzia o prostej składni, npfd pattern
.źródło
shopt -s globstar
polecenia. Jest to obsługiwane w powłokach Bash, Zsh i podobnych.bash-3.2$ shopt -s globstar
dajebash: shopt: globstar: invalid shell option name
fd
W przypadku, gdy
find
jest zbyt wolny, wypróbujfd
narzędzie - prostą i szybką alternatywę dlafind
napisanych w Rust.Składnia:
Próbny:
Strona domowa: https://github.com/sharkdp/fd
źródło
asciinema
, a następnie przekonwertowano na format GIF, ale nie jestem pewien.asciicast2vector
można go użyć.W dopasowaniu wieloznacznym możesz podać ciąg, który chcesz dopasować, np. * .C (dla wszystkich plików c)
źródło
Możesz użyć:
Jeśli chcesz użyć REGX użyj
-iname
źródło
Następujące polecenie wyświetli listę wszystkich plików o dokładnej nazwie „wzorzec” (na przykład) w bieżącym i jego podfolderach.
find ./ -name "pattern"
źródło
Domyślny sposób wyszukiwania pliku rekurencyjnego i dostępny w większości przypadków to
Rozpoczyna rekurencyjne przechodzenie do nazwy pliku lub wzorca z bieżącego katalogu, w którym się znajdujesz. Za pomocą polecenia find możesz używać symboli wieloznacznych i różnych przełączników, aby wyświetlić pełną listę opcji, wpisz
lub jeśli strony podręcznika nie są dostępne w twoim systemie
Istnieją jednak bardziej nowoczesne i szybsze narzędzia niż znajdowanie, które przemierzają cały system plików i indeksują pliki, jednym z takich powszechnych narzędzi jest zlokalizowanie lub slocate / mlocate, powinieneś sprawdzić instrukcję swojego systemu operacyjnego, jak go zainstalować, a gdy już to zrobisz zainstalowany musi zainicjować bazę danych, jeśli skrypt instalacyjny tego nie zrobi, można to zrobić ręcznie, wpisując
I, aby użyć go do wyszukiwania określonego typu pliku
Lub, aby wyszukać nazwę pliku lub tupot z bieżącego katalogu, możesz wpisać:
Przejrzy bazę danych plików i szybko wydrukuje nazwy ścieżek pasujące do wpisanego wzoru. Aby zobaczyć pełną listę opcji lokalizacji, wpisz:
locate --help
lubman locate
Dodatkowo możesz skonfigurować lokalizację, aby aktualizowała bazę danych w zaplanowanym czasie za pomocą zadania cron, więc przykładowy cron, który aktualizuje bazę danych o 1 w nocy, wygląda następująco:
Te zadania cron muszą być skonfigurowane przez użytkownika root, ponieważ updatedb potrzebuje uprawnień roota do przechodzenia przez cały system plików.
źródło
do wyszukiwania plików
find / -xdev -name settings.xml
-> cały komputerfind ./ -xdev -name settings.xml
-> bieżący katalog i jego podkatalogdla plików z rozszerzeniem
źródło
Jestem zaskoczony, widząc, że lokalizowanie nie jest często używane, gdy mamy iść rekurencyjnie.
Najpierw zlokalizuję „$ PWD”, aby uzyskać listę plików w bieżącym folderze, a następnie uruchomię na nich greps, jak mi się podoba.
Oczywiście przy założeniu, że aktualizacja jest wykonywana, a indeks jest okresowo aktualizowany. Jest to znacznie szybszy sposób na znalezienie plików niż uruchomienie znalezienia i poproszenie go o zejście z drzewa. Wspominając o tym dla kompletności. Nie ma nic przeciwko użyciu find, jeśli drzewo nie jest bardzo ciężkie.
źródło
locate "$PWD*.mp4"
Wystarczy przypomnieć, że możesz być w stanie pominąćgrep
Poniższe polecenie pomaga wyszukać dowolne pliki
1) Bez względu na wielkość liter
2) Wynik Bez folderów bez pozwolenia
3) Wyszukiwanie z katalogu głównego lub ze ścieżki, którą lubisz. Zmień / z preferowaną ścieżką.
Składnia:
find -iname 2> & 1 | grep -v „Odmowa zezwolenia”
Przykład
źródło
find / -iname '*C*.xml' 2>/dev/null
Jeśli chcesz wyszukać specjalny plik ze znakiem wieloznacznym, możesz użyć następującego kodu:
Załóżmy, że chcesz przeszukać wszystkie pliki .conf stąd:
.
oznacza, że wyszukiwanie rozpoczęło się od tego miejsca (bieżące miejsce)-type
oznacza typ elementu wyszukiwania, którym jest plik (f).-name
oznacza, że chcesz wyszukiwać pliki o nazwach * .conf .źródło
Spowoduje to przeszukanie wszystkich powiązanych plików w bieżących i podkatalogach, obliczając ich liczbę osobno, a także całkowicie:
źródło
Posługiwać się
Wyjaśnienie
find
rekursja.-o
Oznacza-or
. Powyżej oznacza poszukiwanie tego symbolu wieloznacznego LUB tego. Jeśli masz tylko jeden wzór, nie ma takiej potrzeby-o
.źródło