Найти имена файлов с определенным шаблоном в командной строке Windows?


11

Попытка найти любые файлы определенного шаблона в каталоге и его подкаталогах. Я старался:

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

в надежде найти файлы типа

abc.txt.r12222
tjy.java.r9994

Где число добавляется после буквы r, сделано SVN.

Что я делаю неправильно?


3
Добро пожаловать в СУ! На сайтах stackexchange, когда вам помог ответ, можно поблагодарить людей за то, что они проголосовали за их ответ и приняли его (нажав на галочку слева от ответа), если это решило вашу проблему. Я говорю только потому, что вы, кажется, не приняли ни одного из ответов, которые вы получили на свои вопросы.
Тердон

Ответы:


10

Я только что ответил на это на Stack Overflow пару дней назад. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

В вашем случае это будет выглядеть так:

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

Обновить

Символ * в одном из других примеров ".r [0-9] * $" также находит записи, заканчивающиеся на 'r', поскольку квантификатор * означает 0 или более.


Привет cpattersonv1 - спасибо за ответ dir * / s / b | findstr \ .r [0-9] * $ works
chz

Похоже, что findstr не распознает символ «1» или «+»
Скотт Чу,

@ScottChu начать новый вопрос с примера. (Я ответил на это 5 лет назад.)
AbsoluteƵERØ

0

Я предлагаю вам сделать это с grepпомощью утилиты для UNIX-подобных систем, которая была перенесена в Windows и может сопоставлять строки с помощью регулярных выражений.

grepвходит в комплект MSYS MinGW, установщик можно найти здесь . (установить только MSYS)

Затем вам нужно будет добавить инструменты MSYS в переменную PATH, каталог по умолчанию для MSYS: C:\MinGW\msys\1.0\bin

Наконец, вы можете выполнить поиск с помощью этой команды:

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

... что означает: "получить вывод из ls -a(список файлов, включая скрытые файлы) и передать его grep, сопоставить строки, которые выглядят как . .r [0-9] * (хотя бы одна звездочка обозначена каждой звездочкой)".


привет gronostaj спасибо за ответ; Я пытался$ 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
ЧЗ

Привет я до сих пор не могу получить полный путь к имени файла; как я это сделал ? например , c:\pager\test.jar.r46521в отличие от (стандартный ввод): test.jar.r46521
CHZ

ls | grep такой же, как dir | findstr в винде.
AbsoluteƵERØ

0

Вы можете попробовать это:

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

Для справки введите findstr /?.


Привет, mfm4aa, спасибо, что откликнулся - похоже, не работает; Я перепробовал все комбинации, и ни один из них не дал муравьиному перечисленному ответу: например, 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

Пожалуйста, попробуйте:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro

Привет, МФМ, спасибо за письмо - я до сих пор не могу найтиC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
ЧЗ

:) просто типа dir /aa| findstr .r[0-9]*$. Это работает здесь ...
Эндоро

Привет, Эндоро, спасибо за ответ. Это не сработало - там написано, что файл не найден
chz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.