Muszę wyszukać pliki zaczynające się od określonej nazwy. Może istnieć wiele plików zaczynających się od określonego wzorca i chcę wyświetlić listę wszystkich takich plików obecnych w katalogu.
58
Aby uzupełnić istniejące odpowiedzi:
ls
Domyślnego narzędzia do listy katalogów ls
można używać w połączeniu z symbolami wieloznacznymi powłoki. Aby wyszukać wszystkie pliki ze wzorem abc
:
ls abc* # list all files starting with abc---
ls *abc* # list all files containing --abc--
ls *abc # list all files ending with --abc
Pamiętaj, że rozszerzenie pliku ma również znaczenie dla wyników wyszukiwania.
tree
W przypadku, gdy musimy wyświetlić listę plików w drzewie katalogów, możemy również wydać tree
polecenie wyszukiwania określonego wzorca, na przykład:
tree -P 'abc*' # list directory tree of file starting with abc---
tree -l 'def*' # exclude files starting with def---
W takim przypadku tree
sam obsługuje symbole wieloznaczne.
ls -l B*
, pokazuje zawartość wszystkich katalogów zaczynających się od, aB
nie tylko nazwy pasujących katalogów?ls
o wyświetlenie katalogu, otwiera go, to tak samo jak robiącls -l BirthdayPhotos
. Możesz ukryć to zachowanie za pomocąls -d B*
.B*
jako specyfikację katalogu?B*
rozszerza się, aby pasowało do wszystkich katalogów, które zaczynają się od,B
więc naprawdę przekazujeszls
listę katalogów, więc otwiera je wszystkie dla Ciebie.ls -d ABC*
o to pytał autor. Komentuje również we fragmencie kodu są złe,ls abc*
wymienia zawartość katalogów zaczynających się ABC.Możesz użyć
find
polecenia do wyszukiwania plików ze wzoremPowyższe polecenie przeszuka plik zaczynający się od abc w bieżącym katalogu roboczym.
-name 'abc'
wyświetli listę plików, które są dokładnie dopasowane. Np .: abcMożesz także użyć
opcja z
find
poleceniem wyszukiwania nazwy pliku za pomocą wzorcaźródło
Można to zrobić na wiele sposobów, w zależności od tego, co chcesz z nimi zrobić. Ogólnie rzecz biorąc, jeśli chcesz je tylko wyświetlić, możesz to zrobić w terminalu, używając:
find | grep '^\./ABC'
... i zastępując
ABC
tekstem.Aby zrozumieć polecenie, podzielmy je nieco:
find
wyświetla wszystkie pliki w bieżącym katalogu i jego podkatalogach; użycie go samemu po prostu wyświetli wszystko. Zauważ, żefind
wypisuje każdy plik lub katalog zaczynając od./
, wskazując, że ich ścieżka jest względem bieżącego katalogu. Świadomość tego jest ważna, ponieważ oznacza, że będziemy szukać wyników zaczynając od,./ABC
a nie tylkoABC
.Znak potoku
|
przekierowuje dane wyjściowe jednej komendy do drugiej, w tym przypadku dane wyjściowefind
są przekierowywane nagrep
. Nazywa się to orurowaniem.grep
trwa wyjście i filtruje go za pomocą podanego wzorca,^\./ABC
.' '
aby uniemożliwić powłoce interpretację zawartych w niej znaków specjalnych.Teraz sam wzorzec jest zapisany w określonej składni zwanej wyrażeniem regularnym lub w skrócie regex . Regex jest niezwykle potężnym narzędziem poszukiwania jeśli opanujesz ją, i istnieje miejsc, takich jak ten , który nauczy Cię o tym bardziej szczegółowo, ale należy pamiętać, że
grep
nie jest pełnoprawnym regex silnika i nie można zrobić wszystko, co z nim.Do naszych celów:
^
in regex dopasowuje początek łańcucha; Zapobiega to dopasowaniu wzorca, jeśli nie występuje na początku nazwy pliku..
regex ma również specjalne znaczenie: oznacza „dopasuj dowolny pojedynczy znak tutaj”. Jeśli chcesz użyć go jako dosłownej kropki, musisz „uciec” za pomocą ukośnika odwrotnego\
. (Tak, dopasowanie dowolnej postaci byłoby w naszym przypadku nieszkodliwe, ale zrobiłem to ze względu na kompletność.)źródło
find | grep
kiedyfind
ma swoje całkowicie doskonałe możliwości dopasowywania wzorów?możesz użyć GREP, myślę, że jest to najprostsze rozwiązanie, prawdopodobnie dodaj też inne parametry grep, aby dopasowanie było dokładniejsze
źródło
Możesz wyszukać określony wzorzec za pomocą menedżera plików Nautilus i wyrażeń regularnych.
Aby to zrobić, kliknij Wybierz elementy pasujące w menu Gear, jak poniżej (możesz również nacisnąć Ctrl+ s).
Następnie wpisz wyrażenie regularne
ABC*
i sprawdź poprawność.Każdy plik, którego nazwa pasuje do wzorca, zostanie automatycznie wybrany.
Używam Nautilus 3.6. * Z GNOME3 PPA na Ubuntu 12.10 (Quantal).
źródło
Najłatwiejsze dla mnie rozwiązanie
Tutaj możesz podać dowolne wyrażenie regularne we WZORZE.
Na przykład, aby znaleźć pliki z „ab” w dowolnym miejscu w jego nazwie, wpisz
Aby znaleźć pliki zaczynające się od „ab”, wpisz
źródło
Jeśli nie znasz katalogu, w którym
ABC*
znajdują się pliki, i masz miliony plików,locate
polecenie jest najszybszą metodą.Uwagi:
find
polecenie zaczynające się w/
katalogu głównym będzie trwać bardzo długo i wygeneruje wiele błędów uprawnień.sudo updatedb
.źródło
używam
lub
Pokazuje wszystkie pliki z abc, nie tylko zaczynając od abc. Ale jest to dla mnie naprawdę łatwy sposób.
źródło
Pyton:
Perl:
źródło
Jest to dopasowanie globalne, które jest zakotwiczone na obu końcach. Spowoduje to dopasowanie wszystkich wystąpień plików rozpoczynających się od „ABC”, takich jak „ABC”, „ABC.txt”, „ABC123”, ale nie „xABC”. Z wiersza poleceń używającego „ls” zamiast „printf” jest tutaj bezpieczna alternatywa, jednak w zależności od opinii, z którą się zgadzasz, „ls” nie jest bezpieczny do użycia w skrypcie. W takim przypadku użycie „printf” z dopasowaniem globalnym jest uważane za bezpieczne. Jeśli zamierzasz użyć tego w skrypcie, wynik „printf” nie będzie zawierał nowego znaku linii do końca strumienia wyjściowego jako takiego:
Zwroty:
Jeśli potrzebujesz podziału linii po każdej instancji:
Zwroty:
„/ path / to / files /” pozostaje na wyjściu, jeśli wprowadzono go w ten sposób po uruchomieniu polecenia „printf”. Bez tego pojawia się tylko nazwa pliku:
Zwroty
Zakładając, że uruchomisz polecenie w katalogu, w którym istnieją pliki.
źródło
echo /path/to/files/ABC* | tr " " "\n"
nie jest dobry pomysł. Zastanów się, czy jest plik/path/to/files/ABC EFG
, w nazwie pliku jest spacja. Twojatr
nazwa pliku zostanie podzielona na dwie osobne linie, co nie jest dobre. Jeszcze gorzej, jeśli w nazwie pliku jest wiele spacji. Polecam użyćprintf "%s\n" ABC*
zamiast tego, co powinno pomóc w\n
Command-t w jednej z moich ulubionych wtyczek vim, jest to wtyczka oparta na Ruby powyżej integracji z FZF.
Używając Comamnd-T i FZF, możesz wyszukiwać za pomocą bardzo szybkiego mechanizmu „rozmytego” dla:
Jak widzisz
Zawsze przeszukuję historię poleceń, otwierając nowy terminal i naciskając:
Oprócz wyszukiwania we wszystkich folderach rekurencyjnie przez pisanie na dowolnej karcie terminala:
Następnie uruchom nazwę pliku
Możesz także pisać w środku
vim
Naprawdę pomocne, szczególnie w dużych folderach.
źródło
Załóżmy, że jestem w katalogu głównym i chcę tylko listę katalogu etc: piszemy,
wynik, który otrzymujemy,
Inny przykład,
Możemy również napisać:
dostajemy
źródło