Odpowiedzi:
Użyj do tego celu find :
find . -name "foo*"
find
potrzebuje punktu początkowego, a .
kropka wskazuje bieżący katalog.
find . foo*
, to foo*
byłoby rozwinięte, a następnie przekazane do znalezienia.
" "
jest to bardzo potrzebne do wyszukiwania rekurencyjnego.
find . -name "foo*" 2>/dev/null
Pipowanie w grep jest często wygodniejsze; daje pełną moc wyrażeń regularnych do dowolnego dopasowywania symboli wieloznacznych.
Na przykład, aby znaleźć wszystkie pliki z ciągiem znaków „foo” bez rozróżniania wielkości liter:
~$ find . -print | grep -i foo
find
zawiera również -iname
, -regex
i -iregex
flagi dla wielkości liter maska, regex i wielkości liter regex dopasowywania tak rurociągu, aby grep
nie jest konieczne.
find
polecenia obsługujące te opcje. Czasami grep
staje się jedyną opcją.
find
znajdzie wszystkie pliki pasujące do wzorca:
find . -name "*foo"
Jeśli jednak chcesz zdjęcie:
tree -P "*foo"
Mam nadzieję że to pomoże!
brew install tree
dla użytkowników Mac OSX bez apt-get
zainstalowanego oprogramowania
find -L . -name "foo*"
W kilku przypadkach potrzebowałem parametru -L do obsługi dowiązań katalogu symbolicznego. Domyślnie dowiązania symboliczne są ignorowane. W takich przypadkach było to dość mylące, ponieważ zmieniałem katalog na podkatalog i widziałem plik pasujący do wzorca, ale find nie zwrócił nazwy pliku. Użycie -L rozwiązuje ten problem. Opcje dowiązania symbolicznego dla find to -P -L -H
Jeśli twoja powłoka obsługuje nową opcję globowania (można ją włączyć przez :)shopt -s globstar
, możesz użyć:
echo **/*foo*
znaleźć rekursywnie dowolne pliki lub foldery. Jest to obsługiwane przez powłoki Bash 4, zsh i podobne.
Osobiście mam zdefiniowaną tę funkcję powłoki:
f() { find . -name "*$1*"; }
Uwaga: powyższą linię można wkleić bezpośrednio do powłoki lub dodać do ~/.bashrc
pliku użytkownika .
Następnie mogę wyszukać dowolne pliki, wpisując:
f some_name
Alternatywnie możesz użyć fd
narzędzia o prostej składni, np fd pattern
.
shopt -s globstar
polecenia. Jest to obsługiwane w powłokach Bash, Zsh i podobnych.
bash-3.2$ shopt -s globstar
dajebash: shopt: globstar: invalid shell option name
fd
W przypadku, gdy find
jest zbyt wolny, wypróbuj fd
narzędzie - prostą i szybką alternatywę dla find
napisanych w Rust.
Składnia:
fd PATTERN
Próbny:
Strona domowa: https://github.com/sharkdp/fd
asciicast2vector
można go użyć.
find <directory_path> -type f -name "<wildcard-match>"
W dopasowaniu wieloznacznym możesz podać ciąg, który chcesz dopasować, np. * .C (dla wszystkich plików c)
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'
Domyślny sposób wyszukiwania pliku rekurencyjnego i dostępny w większości przypadków to
find . -name "filepattern"
Rozpoczyna rekurencyjne przechodzenie do nazwy pliku lub wzorca z bieżącego katalogu, w którym się znajdujesz. Za pomocą polecenia find możesz używać symboli wieloznacznych i różnych przełączników, aby wyświetlić pełną listę opcji, wpisz
man find
lub jeśli strony podręcznika nie są dostępne w twoim systemie
find --help
Istnieją jednak bardziej nowoczesne i szybsze narzędzia niż znajdowanie, które przemierzają cały system plików i indeksują pliki, jednym z takich powszechnych narzędzi jest zlokalizowanie lub slocate / mlocate, powinieneś sprawdzić instrukcję swojego systemu operacyjnego, jak go zainstalować, a gdy już to zrobisz zainstalowany musi zainicjować bazę danych, jeśli skrypt instalacyjny tego nie zrobi, można to zrobić ręcznie, wpisując
sudo updatedb
I, aby użyć go do wyszukiwania określonego typu pliku
locate filename
Lub, aby wyszukać nazwę pliku lub tupot z bieżącego katalogu, możesz wpisać:
pwd | xargs -n 1 -I {} locate "filepattern"
Przejrzy bazę danych plików i szybko wydrukuje nazwy ścieżek pasujące do wpisanego wzoru. Aby zobaczyć pełną listę opcji lokalizacji, wpisz:
locate --help
lubman locate
Dodatkowo możesz skonfigurować lokalizację, aby aktualizowała bazę danych w zaplanowanym czasie za pomocą zadania cron, więc przykładowy cron, który aktualizuje bazę danych o 1 w nocy, wygląda następująco:
0 1 * * * updatedb
Te zadania cron muszą być skonfigurowane przez użytkownika root, ponieważ updatedb potrzebuje uprawnień roota do przechodzenia przez cały system plików.
Jestem zaskoczony, widząc, że lokalizowanie nie jest często używane, gdy mamy iść rekurencyjnie.
Najpierw zlokalizuję „$ 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 aktualizacja jest wykonywana, a indeks jest okresowo aktualizowany. Jest to znacznie szybszy sposób na znalezienie plików niż uruchomienie znalezienia i poproszenie go o zejście z drzewa. Wspominając o tym dla kompletności. Nie ma nic przeciwko użyciu find, jeśli drzewo nie jest bardzo ciężkie.
locate "$PWD*.mp4"
Wystarczy przypomnieć, że możesz być w stanie pominąćgrep
Poniższe polecenie pomaga wyszukać dowolne pliki
1) Bez względu na
wielkość liter
2) Wynik Bez folderów bez pozwolenia
3) Wyszukiwanie z katalogu głównego lub ze ścieżki, którą lubisz. Zmień / z preferowaną ścieżką.
Składnia:
find -iname 2> & 1 | grep -v „Odmowa zezwolenia”
Przykład
znajdź / -iname „C * .xml” 2> i 1 | grep -v „Odmowa zezwolenia”
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Jeśli chcesz wyszukać specjalny plik ze znakiem wieloznacznym, możesz użyć następującego kodu:
find . -type f -name "*.conf"
Załóżmy, że chcesz przeszukać wszystkie pliki .conf stąd:
.
oznacza, że wyszukiwanie rozpoczęło się od tego miejsca (bieżące miejsce)
-type
oznacza typ elementu wyszukiwania, którym jest plik (f).
-name
oznacza, że chcesz wyszukiwać pliki o nazwach * .conf .
Posługiwać się
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Wyjaśnienie
find
rekursja.-o
Oznacza -or
. Powyżej oznacza poszukiwanie tego symbolu wieloznacznego LUB tego. Jeśli masz tylko jeden wzór, nie ma takiej potrzeby -o
.