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?
17 answers
Użyj Znajdź w tym celu:
find . -name "foo*"
find
wymaga punktu początkowego, a .
(kropka) wskazuje na bieżący katalog.
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
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!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
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
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
.
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)
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'
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"
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"
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.
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.
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"
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
- pierwszy parametr to katalog, który chcesz przeszukać.
- domyślnie
find
wykonuje rekurencję. -
-o
oznacza-or
. Więc powyżej oznacza Szukaj tej lub tej. Jeśli masz tylko jeden wzór, to nie ma potrzeby-o
. - cudzysłowy wokół wzorca wieloznacznego są wymagane.
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.
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
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
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