Jak mogę rekurencyjnie znaleźć wszystkie pliki w bieżącym i podfolderach na podstawie dopasowania symboli wieloznacznych?

Jak mogę rekurencyjnie znaleźć wszystkie pliki w bieżącym i podfolderach na podstawie dopasowania symboli wieloznacznych?

 2116
Author: hyde, 2011-05-05

17 answers

Użyj Znajdź w tym celu:

find . -name "foo*"

find wymaga punktu początkowego, a . (kropka) wskazuje na bieżący katalog.

 3078
Author: tux21b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 15:45:12

Piping find do grepa jest często wygodniejszy; daje pełną moc wyrażeń regularnych dla dowolnego dopasowania symboli wieloznacznych.

Na przykład, aby znaleźć wszystkie pliki z niewrażliwym na wielkość liter ciągiem " foo " w nazwie pliku:

~$ find . -print | grep -i foo
 239
Author: Paul Whipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-03 22:56:42

find znajdzie wszystkie pliki pasujące do wzorca:

find . -name "*foo"

Jednak, jeśli chcesz zdjęcie:

tree -P "*foo"
Mam nadzieję, że to pomoże!
 163
Author: IslandCow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-16 16:58:21
find -L . -name "foo*"

W kilku przypadkach potrzebowałem parametru-L do obsługi symbolicznych linków do katalogów. Domyślnie dowiązania symboliczne są ignorowane. W tych przypadkach było to dość mylące, ponieważ zmieniłem katalog na podkatalog i zobaczyłem plik pasujący do wzorca, ale find nie zwrócił nazwy pliku. Użycie opcji-L rozwiązuje ten problem. Opcje dowiązania symbolicznego dla find to -p-L-h

 48
Author: toddcscar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-14 02:47:53

fd

W przypadku, gdy find jest zbyt wolny, spróbuj fd utility - prostej i szybkiej alternatywy dla find napisanej w Rust.

Składnia:

fd PATTERN

Demo:

Strona domowa: https://github.com/sharkdp/fd

 46
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 15:22:45

Jeśli twoja powłoka obsługuje nową opcję globbingu (można włączyć przez: shopt -s globstar), możesz użyć:

echo **/*foo*

Aby rekurencyjnie znaleźć pliki lub foldery. Jest to obsługiwane przez powłoki Bash 4, zsh i podobne.


Osobiście mam zdefiniowaną funkcję powłoki:

f() { find . -name "*$1*"; }

Uwaga: Powyższa linia może być wklejona bezpośrednio do powłoki lub dodana do pliku ~/.bashrc użytkownika.

Potem mogę poszukać dowolnych plików wpisując:

f some_name

Alternatywnie możesz użyj a fd Narzędzie {[9] } o prostej składni, np. fd pattern.

 40
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 12:06:57
find <directory_path>  -type f -name "<wildcard-match>"

W polu "wildcard-match" możesz podać ciąg znaków, który chcesz dopasować, np. *.c (dla wszystkich plików c)

 31
Author: XYZ_Linux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-05 13:32:47

Możesz użyć:

# find . -type f  -name 'text_for_search'

Jeśli chcesz użyć REGX użyj -iname

# find . -type f  -iname 'text_for_search'
 12
Author: user8848899,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-24 07:39:29

Następujące polecenie wyświetli listę wszystkich plików o dokładnej nazwie "pattern" (na przykład) w bieżącym i jego podfolderach.

find ./ -name "pattern"

 10
Author: Anshul Singhal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-27 05:03:06

Do wyszukiwania plików
find / -xdev -name settings.xml --> cały komputer
find ./ -xdev -name settings.xml --> aktualny katalog i jego podkatalog

dla plików z rozszerzeniem typu

find . -type f -name "*.iso"
 9
Author: Alberto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 08:47:01

Domyślnym sposobem wyszukiwania Pliku rekurencyjnego, dostępnym w większości przypadków jest

find . -name "filepattern"

Rozpoczyna rekurencyjne przemierzanie nazwy pliku lub wzorca z bieżącego katalogu, w którym się znajdujesz. Aby zobaczyć pełną listę opcji, wpisz

man find

Lub jeśli strony man nie są dostępne w systemie

find --help

Jednak, są bardziej nowoczesne i szybsze narzędzia niż find, które przemierzają cały system plików i indeksowania plików, jednym z takich wspólnych narzędzi jest locate lub slocate / mlocate, należy sprawdzić podręcznik systemu operacyjnego, jak go zainstalować, a po zainstalowaniu musi zainicjować bazę danych, jeśli install script NIE zrobić tego za Ciebie, można to zrobić ręcznie, wpisując

sudo updatedb

I, aby użyć go do wyszukania określonego typu pliku

locate filename

Lub, aby wyszukać nazwę pliku lub wzór z bieżącego katalogu, możesz wpisać:

 pwd | xargs -n 1 -I {} locate "filepattern"

Przejrzy bazę danych plików i szybko wydrukuj nazwy ścieżek pasujące do wpisanego wzorca. Aby zobaczyć pełną listę opcji locate, wpisz: locate --help lub man locate

Dodatkowo możesz skonfigurować locate, aby aktualizować bazę danych w zaplanowanych godzinach za pomocą zadania cron, więc przykładowy cron, który aktualizuje db o 1AM wyglądałby następująco:

0 1 * * * updatedb

Te zadania cron muszą być skonfigurowane przez roota, ponieważ updatedb potrzebuje uprawnień roota, aby przemierzać cały system plików.

 9
Author: Aleksandar Pavić,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 06:45:11

Jestem zaskoczony, widząc, że locate nie jest używany mocno, gdy mamy iść rekurencyjnie.

Najpierw wykonałbym zlokalizowanie "$ 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 updatedb jest wykonywany, A Indeks jest okresowo aktualizowany. Jest to znacznie szybszy sposób znajdowania plików niż uruchamianie znaleziska i proszenie go o zejście do drzewa. Wspominając o tym dla kompletności. Nie ma nic przeciwko używaniu znajdź, jeśli drzewo nie jest bardzo ciężkie.

 7
Author: melchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-11 09:01:59

Poniższe polecenie pomaga wyszukać dowolne pliki

1) niezależnie od przypadku
2) wynik wyłączający foldery bez uprawnień
3) wyszukiwanie z korzenia lub ze ścieżki, którą lubisz. Zmień / z wybraną ścieżką.

składnia:
find-iname "2 > &1 / grep-v "Permission denied"

przykład

Find / - iname ' C*.xml '2> & 1 / grep-v "Permission denied"

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"
 6
Author: MukeshKoshyM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 18:56:56

Użyj

find path/to/dir -name "*.ext1" -o -name "*.ext2"

Explanation

  1. pierwszy parametr to katalog, który chcesz przeszukać.
  2. domyślnie find wykonuje rekurencję.
  3. -o oznacza -or. Więc powyżej oznacza Szukaj tej lub tej. Jeśli masz tylko jeden wzór, to nie ma potrzeby -o.
  4. cudzysłowy wokół wzorca wieloznacznego są wymagane.
 6
Author: Shital Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 08:56:13

Jeśli chcesz przeszukiwać specjalny plik za pomocą symboli wieloznacznych, możesz użyć następującego kodu:

find . -type f -name "*.conf"

Załóżmy, że chcesz przeszukać każdy .pliki konf stąd:

. oznacza wyszukiwanie rozpoczęte stąd (aktualne miejsce)
-type oznacza Typ elementu wyszukiwania, który tutaj jest plik (F).
-name oznacza, że chcesz przeszukiwać pliki za pomocą *.conf nazwy.

 5
Author: Reza Harasani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-05 02:52:19

Spowoduje to przeszukanie wszystkich powiązanych plików w katalogach bieżących i podkatalogach, obliczając ich liczbę wierszy oddzielnie i całkowicie:

find . -name "*.wanted" | xargs wc -l
 3
Author: Jay Yang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 02:46:11

Z Pythonem > 3.5, używając glob, . wskazanie bieżącego folderu i szukanie plików .txt:

 python -c "import glob;[print(x) for x in glob.glob('./**/*txt', recursive=True)]"

Dla starszych wersji Pythona można zainstalować glob2

 0
Author: Katu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-09 23:37:27