Wyszukaj wszystkie pliki z rozszerzeniem .sql w folderach i podfolderach

17

Chcę wyszukać wszystkie pliki z rozszerzeniem .sql w folderach i podfolderach (rekurencyjne).

W jaki sposób mogę to zrobić?

Blankman
źródło

Odpowiedzi:

29

Lub...

find $directory_name -name \*.sql

Na przykład

find / -name \*.sql

Lub

find ~ \*.sql

(gdzie ~ oznacza / home / twoja_nazwa_użytkownika /) lub ...

find /usr/local/share/ \*.sql

i tak dalej.


źródło
2

Uruchom to w wierszu polecenia:

cd / && find | grep '\.sql$'

Zmień „/” na katalog, który chcesz przeszukać.

findKomenda jest w stanie wykonać zadanie bez grep (za pomocą dodatkowych opcji), ale uważam, że powyżej użycie bardziej wygodne.

W kolejności powyższe polecenie:

  1. Zmienia bieżący katalog na katalog główny ( cd /)
  2. Wyświetla wszystkie pliki i katalogi w bieżącym katalogu i poniżej niego ( find)
  3. Filtruje pliki i katalogi dla wszystkiego, co kończy się na „.sql” ( | grep '\.sql$')
Barbarrosa
źródło
dzięki, możesz to wyjaśnić? używasz grep i przekazujesz jego wyniki, aby znaleźć?
Blankman,
Wręcz przeciwnie. Używam find i przekazuję jego wynik do grep. Dodałem bardziej szczegółowe wyjaśnienie powyżej.
Barbarrosa,
czy to też działałoby na komputerze Mac? Próbowałem „znaleźć | grep '\ .sql $' i wyświetlił informacje pomocy użytkowania.
Blankman
find jest potężnym narzędziem i naprawdę nie musisz przesyłać danych wyjściowych do grep. To jest fajny link - content.hccfl.edu/pollock/unix/findcmd.htm
Panther
1
findma już możliwości filtrowania
enzotib
1

Wiem, że jest to stary post, ale jestem w tym całkiem nowy i znalazłem łatwy sposób na znalezienie wszystkich plików określonego rozszerzenia w katalogu i jego podkatalogach potomnych. Cóż, najpierw przejdź do tego parent Directoryczasu, find . -name '*.sql'a znajdziesz wszystkie pliki z rozszerzeniem .sql w katalogach i podkatalogach.

W moim przypadku chciałem usunąć wszystkie pliki .xml z katalogu i jego podkatalogów, więc zrobiłem więcej, dodałem usuwanie tak jak tutajfind . -name '*.xml' | xargs rm

Mam nadzieję, że ktoś ci pomoże :)

M090009
źródło
2
findrozumie -deletepolecenie. Nie musisz się angażować rm. Lub możesz użyć -execpolecenia, aby wywołać je bezpośrednio bez objazdu przez potok i xargs.
David Foerster
0
locate -br \\.sql$ | egrep '^/folder/path/'

Jeśli nie jest zainstalowany, zainstaluj go wcześniej za pomocą:

sudo apt install mlocate
Vzzarr
źródło
Wymaga to aktualizacji mlocate.db instancji, która nie jest instalowana od razu po uruchomieniu w Ubuntu (I blieve). A dlaczego nie po prostu locate '/folder/path/*.sql'?
David Foerster
@DavidFoersterI Próbowałem zgodnie ze specyfikacją, ale nie działa, myślę, że wyrażenie regularne locatema inne ustawienie niż wyrażenie regularne używane wegrep
Vzzarr
locate dopasowuje wyrażenia glob, takie jak /folder/path/*.sql wyrażenia regularne.
David Foerster
przepraszam, ale man locatedostaję-r, --regexp REGEXP - Search for a basic regexp REGEXP więc założyłem, że to regex. W każdym razie próbowałem twojego „globalnego wyrażenia”, ale nie działa, przepraszam
Vzzarr
Przeczytaj przynajmniej kilka pierwszych zdań opisu, zanim zaczniesz wybierać z opcji synposis: „Jeśli --regexnie jest określony, PATTERNmoże zawierać znaki globowania.” ( Źródło )
David Foerster