logo

Znajdź polecenie w systemie Linux/Unix z przykładami

Polecenie find pomaga nam znaleźć konkretny plik w katalogu. Służy do wyszukiwania listy plików dla różnych warunków, takich jak uprawnienia, własność użytkownika, modyfikacja, data/godzina, rozmiar i inne.

W systemach uniksowych i innych systemach operacyjnych polecenie find jest narzędziem wiersza poleceń, które wyszukuje pliki na podstawie kilku formatów określonych przez użytkownika i albo wypisuje nazwę ścieżki wszystkich pasujących obiektów, albo, jeśli wymagane są inne działania, implementuje tę akcję na wszystkie dopasowane obiekty.

Rozpoczyna wyszukiwanie od żądanej lokalizacji, a następnie rekurencyjnie przechodzi przez katalogi (węzły) struktury hierarchicznej (zwykle drzewa). Polecenie find umożliwia wyszukiwanie i przeglądanie różnych systemów partycji plików należących do jednego lub większej liczby urządzeń pamięci masowej w katalogu początkowym.

Format wyszukiwania zawiera wzorzec dopasowywania do nazwy pliku lub zakres czasu dopasowywania do czasu modyfikacji lub czasu dostępu do pliku. Polecenie find domyślnie wyświetla listę wszystkich plików w bieżącym katalogu roboczym. Jednakże użytkownicy mogą ograniczyć wyszukiwanie do żądanego maksymalnego poziomu w katalogu początkowym.

Powiązane programy lokalizujące wykorzystują indeksowaną bazę danych plików uzyskaną za pomocą polecenia fine, aby zapewnić szybszą technikę przeszukiwania całego systemu plików według nazwy.

Narzędzie find jest domyślnie dostarczane z większością plików Dystrybucje Linuksa , więc nie musimy instalować żadnego dodatkowego pakietu. Jest to jedno z najważniejszych i używanych poleceń programu Linuksa system.

 find 

Obie opcje określają, w jaki sposób find powinien uwzględniać dowiązania symboliczne. Domyślną naturą nigdy nie jest poszukiwanie dowiązań symbolicznych. Flaga, tj. -L , doprowadzi do znalezienia dowiązań symbolicznych. Flaga, tj. -H , będzie po prostu realizować dowiązania symboliczne, kontynuując argumenty wiersza poleceń. Flagi są wymienione w standardzie POSIX dla polecenia find. Podstawowym rozszerzeniem jest flaga, tj. -P , aby jawnie wyłączyć następujące dowiązanie symboliczne.

Przynajmniej ścieżka musi przewidywać wyrażenie. Polecenie find może wewnętrznie interpretować symbole wieloznaczne, a polecenia muszą być uważnie cytowane, aby zarządzać manipulacją powłoki.

Komponenty wyrażeń są izolowane przez granicę argumentów wiersza poleceń, ogólnie oznaczaną jako białe znaki w składni powłoki. Są one rozpatrywane od lewej do prawej strony. Mogą zawierać komponenty logiczne, takie jak OR i AND, a także predykaty (akcje i filtry). GNU find zawiera kilka innych funkcji, o których nie wspomina POSIX.

Do określenia katalogu używane są następujące symbole:

(.) : Dla nazwy bieżącego katalogu

(/) : Dla katalogu głównego

Krótka historia polecenia Znajdź

Polecenie find wystąpiło w wersji 5 Uniksa jako element pliku Warsztat programisty projektu i został określony przez Dicka Haighta z cpio, które zostały opracowane do wspólnego użycia.

Pierwotnie implementacja GNU polecenia find była określona przez Erica Deckera . Później został opracowany przez Davida MacKenziego i Tima Wooda , I Jay'a Pletta . Ponadto komenda find została przeniesiona do systemu operacyjnego IBM i.

mvc java

Predykaty

Powszechnie stosowane kolory podstawowe to:

    -wzór nazwy:Sprawdza, czy nazwa pliku jest taka sama jak podany wzorzec powłoki-globa, czy nie.-typ typu:Sprawdza, czy plik jest podanego typu.-wydrukować:Zawsze podaje prawdziwą wartość. Wypisuje bieżącą nazwę pliku i znak nowej linii na standardowe wyjście.-drukuj0:Zawsze podaje prawdziwą wartość. Wypisuje bieżącą nazwę pliku i znak null na standardowe wyjście. Nie potrzebne w POSIX.-exec program [argument ...];:Zawsze podaje prawdziwą wartość. Wykonuje program ze stałymi podanymi argumentami i bieżącą ścieżką pliku.-exec program [argument ...] { } +:Zawsze podaje prawdziwą wartość. Wykonuje program ze stałymi podanymi argumentami i możliwie kilkoma ścieżkami. Prawie w każdej implementacji inne wystąpienia {} oznaczają dodatkowe kopie danej nazwy (aspekt nie jest wymagany w POSIX).-ok program [argument ...];:Działa tak samo jak -exec, ale zwraca wartość false lub true, jeśli program podaje 0.

Znajdź wartości domyślne implementacji opcji -print w przypadku, gdy warunki są prawdziwe, jeśli wyrażenie nie wykorzystuje opcji -ok, -exec, -print lub -print0.

Operatorzy

Operatory ulepszają wyrażenia poleceń find. Są one wymienione w kolejności malejącego pierwszeństwa:

    (wyrażenie):Operator ten może wymusić pierwszeństwo.! wyrażenie:Jeśli wyrażenie zwróci wartość false, zwróci wartość true.
  • wyrażenie1 wyrażenie2 (lub wyrażenie1 -a wyrażenie2 : AND. wyrażenie2 nie jest obliczane, jeśli wyrażenie1 ma wartość fałszywą.
  • wyrażenie1 -o wyrażenie2 : LUB. wyrażenie2 nie jest obliczane, jeśli wyrażenie1 ma wartość true.

Przykłady polecenia find

Zobaczmy następujące przykłady polecenia find:

Znajdź pliki według nazwy

Możemy przeszukać wszystkie pliki kończące się rozszerzeniem „.txt”. Aby to zrobić, wykonaj poniższe polecenie:

 find . -name '*.txt' 

Powyższe polecenie wyświetli listę wszystkich plików tekstowych z bieżącego katalogu roboczego. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Z powyższego wyniku wynika, że ​​po wydaniu polecenia find zostaną wyświetlone wszystkie pliki z rozszerzeniem „.txt”.

Znajdowanie plików według typu

Parametr „-type” służy do określenia typu pliku.

Niektóre typy plików są następujące:

  • f: zwykły plik
  • d: katalog
  • l: dowiązania symboliczne
  • c: urządzenia znakowe
  • b: blokuj urządzenia

Rozważ poniższe polecenie:

 find . -type d -name '*.bak' 

Powyższe polecenie wyświetli listę wszystkich katalogów mających rozszerzenie „.bak”. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Z powyższych wyników wynika polecenie „find . -type d -name '*.bak' wyświetla wszystkie katalogi kończące się na '.bak'.

Znajdź nowsze pliki

Parametr „-newer” pomaga w wyszukiwaniu plików nowszych niż wspomniany plik. Rozważ poniższe polecenie:

 find . -newer msg.txt 

Powyższe polecenie wyświetli wszystkie pliki nowsze niż „msg.txt” z bieżącego katalogu roboczego. Rozważ poniższe dane wyjściowe:

ciąg do znaku
Znajdź Linuksa

Z powyższego wynika, że ​​wszystkie wyświetlone pliki są nowsze niż plik „msg.txt”.

Znajdź i usuń plik

Opcja „-delete” służy do usuwania określonego pliku. Musimy zachować szczególną ostrożność podczas korzystania z tego polecenia, ponieważ nie ma opcji cofania, jeśli zostanie ono wykonane. Rozważ poniższe polecenie:

 find . -name Demo.txt -delete 

Powyższe polecenie usunie plik „Demo.txt” z bieżącego katalogu roboczego. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Znajdź katalog

Do znalezienia katalogu używana jest opcja „type -d”. Rozważ poniższe polecenie:

 find . type -depth -name Newdirectory 

Powyższe polecenie znajdzie lokalizację „Nowy katalog”. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Znajdź pliki według czasu modyfikacji

Do wyszukiwania plików poprzez modyfikację używana jest opcja „-mtime”, po której następuje liczba dni. Liczba dni może być dodatnia lub ujemna. Wartość ujemna będzie używana mniej niż -1 jest używane dla ostatniego dnia i podobnie +1 znajdzie plik dla więcej niż jednego dnia temu. Rozważ poniższe polecenie:

 find ./Newdirectory -mtime -1 

Powyższe polecenie znajdzie pliki zmodyfikowane w ciągu ostatniego dnia. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Znajdź pliki według pozwolenia

Opcja „-perm” służy do wyszukiwania plików za pozwoleniem. Wykonaj polecenie find z opcją „-perm” i przekaż wymaganą wartość. Rozważ poniższe polecenie:

 find ./ -perm 777 

Powyższe polecenie wyświetli listę plików z określonego katalogu, które każdy może przeczytać, zapisać i wykonać.

Znajdź i zamień pliki

Aby znaleźć i zamienić pliki, musimy połączyć polecenie find z poleceniem sed. Aby operować na plikach, użyj opcji „-exec” z poleceniem find. Rozważ poniższe polecenie:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

z powyższego polecenia określone wystąpienie zostanie zastąpione. Rozważ poniższe dane wyjściowe:

Znajdź Linuksa

Znajdź tekst w wielu plikach

Możemy wykonać inną kombinację polecenia find z poleceniem grep, aby znaleźć tekst z różnych plików. Rozważ poniższe polecenie:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Powyższe polecenie znajdzie linie zawierające tekst „demo” ze wszystkich plików tekstowych w katalogu „Nowy katalog”. Rozważ poniższe dane wyjściowe:

data lokalna
Znajdź Linuksa

Z powyższego wyniku możemy zobaczyć linie zawierające tekst „demo”.

Przeszukaj każdy katalog

 $ find / -name file1 -type f -print 

Powyższe polecenie wyszukuje wszystkie katalogi zwykłego pliku o tytule plik1 i wyświetla go na ekranie. Ogólnie rzecz biorąc, wyszukiwanie plików w ten sposób nie jest dobrym pomysłem. Może to zająć sporo czasu. Najlepiej więc wspomnieć o katalogu. Niektóre systemy operacyjne mogą montować systemy plików (dynamiczne), które nie są korzystne dla polecenia find. Bardziej skomplikowane nazwy plików zawierające znaki charakterystyczne dla powłoki mogą wymagać ujęcia w pojedynczy cudzysłów.