grep służy do przeszukiwania pliku w celu sprawdzenia, czy jakaś linia pasuje do danego wyrażenia regularnego. Jednak mam taką sytuację - chcę napisać wyrażenie regularne, które będzie pasowało do samej nazwy pliku (a nie do zawartości pliku). Uruchomię to z katalogu głównego systemu, aby znaleźć wszystkie pliki, które pasują do wyrażenia regularnego.
Na przykład, jeśli chcę znaleźć wszystkie pliki formularzy VB, które zaczynają się od „f” i kończą na .frm, użyję wyrażenia regularnego -
"f[[:alnum:]]*\.frm"
Czy grep może to zrobić? Jeśli nie, czy istnieje narzędzie, które pozwoliłoby mi to zrobić? Dzięki.
-regex
opcję.Przykład
Z instrukcji:
wzorzec find -name
Baza nazwy pliku (ścieżka z usuniętymi wiodącymi katalogami) pasuje do wzorca powłoki. Ponieważ wiodące katalogi są usuwane, nazwy plików rozważanych za dopasowanie z -name nigdy nie będą zawierać ukośnika, więc „-name a / b” nigdy nie będzie do niczego pasować (prawdopodobnie trzeba zamiast tego użyć -path). Metaznaki („*”, „?” I „[]”) odpowiadają „”. na początku nazwy bazowej (jest to zmiana w find-utils-4.2.2; zobacz sekcję ZGODNOŚĆ ZE STANDARDAMI poniżej). Aby zignorować katalog i znajdujące się w nim pliki, użyj -prune; zobacz przykład w opisie -path. Szelki nie są rozpoznawane jako wyjątkowe, pomimo faktu, że niektóre powłoki, w tym Bash, nadają szelki o specjalnym znaczeniu we wzorach muszli. Dopasowywanie nazw plików odbywa się za pomocą funkcji bibliotecznej fnmatch (3). Nie zapomnij ująć wzorca w cudzysłów, aby chronić go przed rozszerzaniem przez powłokę.
źródło
find . -maxdepth 1 -name "*filename*" -print
Jak powiedział Pablo, musisz użyć
find
zamiastgrep
, ale nie ma potrzeby, aby tofind
zrobićgrep
.find
ma wbudowaną funkcjonalność:find
to bardzo potężny program do wyszukiwania plików według nazwy i obsługuje wyszukiwanie według typu pliku, ograniczanie głębokości, łączenie różnych wyszukiwanych terminów z operacjami logicznymi oraz wykonywanie dowolnych poleceń na znalezionych plikach. Więcej informacji można znaleźć na stronie podręcznika wyszukiwania .źródło
-mtime
i-mmin
Możesz znaleźć pełną ścieżkę do pliku używając grep, po prostu potokuj wyjście tree
Oto funkcja, którą możesz umieścić w swoim .bash_profile lub .bashrc
źródło
type_descriptor typy: -
f: zwykły plik
d: katalog
l: dowiązanie symboliczne
c: urządzenia znakowe
b: urządzenia blokowe
źródło
-type typedescriptor
samym. Czy to pomyłka?Możesz też:
Powoduje to przesyłanie danych wyjściowych polecenia tree do grep w celu wyszukiwania. To powie ci tylko, czy plik istnieje.
źródło
Najłatwiej jest
tutaj find wypisze rekursywnie wszystkie pliki w (.), czyli bieżącym katalogu. A potem jest to po prostu zwykłe grep. pojawią się wszystkie pliki o nazwie „test”.
możesz grać z grep zgodnie z wymaganiami. Uwaga: ponieważ grep jest ogólną klasyfikacją ciągów, może skutkować nie tylko nazwami plików. ale jeśli ścieżka ma katalog („/xyz_test_123/other.txt”) również pojawi się w zestawie wyników. Twoje zdrowie
źródło
./foo/bar/latest/fred.txt
.Nie, grep działa dobrze w tym przypadku:
źródło
-l
i-L
.Również dla wielu plików.
źródło