Znajdź nazwy plików o określonym wzorze w wierszu polecenia systemu Windows?

11

Próba znalezienia plików o określonym wzorze w katalogu i jego podkatalogach. Próbowałem:

C:\test\workspace>dir *.*.r[0-9]* /s /b
File Not Found

w nadziei na znalezienie plików takich jak

abc.txt.r12222
tjy.java.r9994

Gdzie liczba jest dodawana po literze r, przez SVN.

Co ja robię źle?

chz
źródło
3
Witamy w SU! W witrynach stackexchange, gdy odpowiedź pomogła ci, sposobem podziękowania innym jest głosowanie za odpowiedzią i zaakceptowanie jej (klikając znacznik wyboru po lewej stronie odpowiedzi), jeśli rozwiązało to problem. Mówię tylko dlatego, że wydaje się, że nie zaakceptowałeś żadnej odpowiedzi na twoje pytania.
terdon

Odpowiedzi:

10

Właśnie odpowiedziałem na to na przepełnieniu stosu kilka dni temu. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

W twoim przypadku wyglądałoby to tak:

dir * /s/b | findstr \.r[0-9]+$

Aktualizacja

Znak * w jednym z pozostałych przykładów „.r [0-9] * $” również znajduje rekordy, które kończą się na „r”, ponieważ * kwantyfikator oznacza 0 lub więcej.

Zero absolutne
źródło
Cześć cpattersonv1 - dziękuję za odpowiedź dir * / s / b | findstr \ .r [0-9] * $ działa
chz
findstr wydaje się nie rozpoznawać 1 lub wielu symboli „+”
Scott Chu
@ScottChu rozpocznij nowe pytanie z przykładem. (Odpowiedziałem na to 5 lat temu.)
AbsoluteƵERØ
0

Moją propozycją jest zrobienie tego za pomocą grep- narzędzia dla systemów typu UNIX, które zostało przeniesione do systemu Windows i może dopasowywać wiersze za pomocą wyrażeń regularnych.

grepjest dołączony do pakietu MSYS MinGW, instalator można znaleźć tutaj . (zainstaluj tylko MSYS)

Następnie musisz dodać narzędzia MSYS do zmiennej PATH, niebezpiecznym katalogiem dla MSYS jest C:\MinGW\msys\1.0\bin

Wreszcie możesz wykonać wyszukiwanie za pomocą tego polecenia:

ls -a | grep ^.+\..+\.r[0-9]+$

... co oznacza: „pobierz dane wyjściowe ls -a(lista plików łącznie z ukrytymi plikami) i przekaż je do grep, dopasuj linie wyglądające jak . .r [0-9] * (z co najmniej jednym znakiem symbolizowanym przez każdą gwiazdkę)”.

gronostaj
źródło
cześć gronostaj dzięki za odpowiedź; Próbowałem$ ls -R | grep -H ^.*[0-9]$ (standard input):res.jar.r469621 (standard input):res.jar.r464460 (standard input):test.jar.r46521 (standard input):test.jar.r46970
chz
Cześć. Nadal nie mogę uzyskać pełnej nazwy pliku; jak mogę to zrobić ? np. c:\pager\test.jar.r46521w przeciwieństwie do (standardowe wejście): test.jar.r46521
chz
ls | grep jest taki sam jak reż | findstr w systemie Windows.
AbsoluteƵERØ
0

Możesz spróbować:

dir /a| findstr .r[0-9]*$

Aby uzyskać pomoc, wpisz findstr /?.

Endoro
źródło
Cześć mfm4aa dzięki za odpowiedź - wydaje się, że nie działa; Wypróbowałem wszystkie kombinacje i żadna z nich nie daje odpowiedzi na listę mrówek: Np. InlineC:\Temp>findstr /S /B [0-9] . C:\Temp>findstr /S /B r[0-9]$ . C:\Temp>findstr /S /B $.*r[0-9]$ C:\Temp>findstr /S /B $.*r*$ C:\Temp>findstr /S /B $.*r..*$ C:\Temp>findstr /S /B $.*r\..*$ C:\Temp>findstr /S /B /R $.*r\..*$ C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$ C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$" C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$" . C:\Temp>findstr /S /B /R "$.*\..r[0-9]$" . C:\Temp>findstr /S /B /R "$.*[0-9]*" . C:\Temp>findstr /S /B /R "$*[0-9]*" .
chz
Spróbuj:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro
Cześć mfm dzięki za pisanie - wciąż nie mogę znaleźćC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
chz
:) po prostu wpisz dir /aa| findstr .r[0-9]*$. To działa tutaj ...
Endoro
Cześć Endoro, dziękuję za odpowiedź. Nie działa - mówi File Not Found
chz