Jak rekursywnie wyszukiwać nazwy katalogów w systemie Linux?
W Linuksie wszystko jest przechowywane w katalogach, a podczas pisania skryptów basha często przydaje się wyszukiwanie katalogów po nazwie. Na szczęście możesz użyć find
polecenia do rekursywnego wyszukiwania nazw katalogów i wyświetlania dopasowań.
Szukaj w katalogach
Polecenie find
służy do wyszukiwania katalogów w systemie Linux. Domyślnie jest w pełni rekurencyjny, więc będzie szukał dopasowań we wszystkich podkatalogach.
Jeśli użyjesz -type d
flagi, find
będzie działać w „trybie katalogowym” i będzie szukać tylko katalogów, które nie pasują do żadnych plików. Możesz go używać razem -name
do wyszukiwania katalogów według nazwy:
find. -type d -name "search"
To polecenie działa w bieżącym katalogu, ale może również przeszukiwać inne katalogi, takie jak ~
.
Problem z używaniem -name
polega na tym, że będzie pasować tylko do nazw bezpośrednich, co oznacza, że nie będzie działać, jeśli nie będzie pasować do w pełni kwalifikowanej nazwy katalogu. Możesz jednak użyć symboli wieloznacznych, aby rozwiązać ten problem, a umieszczenie symbolu wieloznacznego przed i po wyszukiwanym ciągu dopasuje podciąg w dowolnym miejscu w nazwie katalogu. Jeśli dołączysz również nazwy plików, możesz użyć symboli wieloznacznych, aby dopasować pliki, które kończą się określonym rozszerzeniem.
find. -type d -name "*search*"
Jednak będzie to zgodne tylko z nazwą katalogu i nadal będzie ignorować katalog nadrzędny. Jeśli chcesz dopasować przy użyciu całej ścieżki pliku, musisz użyć opcji Regex opisanej poniżej.
find
wypisze listę wszystkich pasujących katalogów, ale musisz być ostrożny, aby konsekwentnie używać bezwzględnych lub względnych ścieżek, ponieważ wpłynie to na ostateczną odpowiedź. Jeśli użyjesz ścieżki względnej, takiej jak kropka dla „bieżącego katalogu”, odpowiedzi będą względne. Ale jeśli określisz ścieżkę bezpośrednio, nawet jeśli jest to katalog bieżący, ścieżka będzie bezwzględna, zaczynając od katalogu głównego.
find
to także coś więcej niż tylko wyszukiwanie tekstu — może być używane do dopasowywania plików na podstawie sygnatur czasowych, rozmiarów plików i innych identyfikatorów Linuksa. Może być również używany -exec
do uruchamiania poleceń w każdym pliku lub katalogu.
Wyszukiwanie za pomocą wyrażeń regularnych
Możesz także użyć bardziej find
zaawansowanego filtrowania wyrażeń regularnych (wyrażeń regularnych), aby znaleźć dopasowania dla złożonych wyszukiwań.
Jedną z głównych zalet korzystania z Regex jest to, że będzie on pasował do całego katalogu, w tym do prowadzących do niego katalogów podstawowych.
Możesz użyć wyrażenia regularnego -regex
zamiast -name
. Pomaga również dołączyć sed
zgodne wyrażenie regularne z -regextype sed
.
odnaleźć. -type d -regextype sed -regex „.*jeden\/.*”
W tym przykładzie wyrażenie regularne zaczyna się od .*one
dopasowania wszystkich katalogów kończących się na „jeden”. Kropka i symbol wieloznaczny będą pasować do dowolnego podciągu poprzedzającego ten. Ukośnik jest następnie zmieniany tak \/
, aby pasował do końca katalogu, po którym następuje kolejny symbol wieloznaczny pasujący do dowolnej nazwy katalogu.
Ogólnie rzecz biorąc, będzie to pasować do każdego katalogu, którego rodzic kończy się na „jeden”, niezależnie od tego, gdzie się znajduje, nawet w podkatalogach. Regex to potężne wyrażenie i musisz uważać, aby Twoje wyrażenie odpowiadało dokładnie temu, czego chcesz — ni mniej, ni więcej.
Używanie grep z wyszukiwaniem
Ponieważ find
może również wyświetlać nieprzetworzony wykaz katalogów, można go przekazać do innych poleceń w celu przetworzenia. Na przykład grep
używany jako narzędzie do wyszukiwania tekstu i szybko używany w wierszu poleceń do prostego wyszukiwania i podświetlania.
find. -type d | grep foo
grep
jest również kompletnym narzędziem wyszukiwania i może być używany z narzędziami, takimi jak wyrażenia regularne, w celu usprawnienia wyszukiwania. Możesz przeczytać nasz przewodnik dotyczący korzystania z niego, aby dowiedzieć się więcej.
Dodaj komentarz