Encontrar nomes de arquivos com determinado padrão na linha de comando do Windows?

10

Tentando encontrar qualquer arquivo de determinado padrão em um diretório e seus subdiretórios. Eu tentei:

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

na esperança de encontrar arquivos como

abc.txt.r12222
tjy.java.r9994

Onde um número é acrescentado após a letra r, feita por SVN.

O que estou fazendo errado?

chz
fonte
3
Bem-vindo ao SU! Nos sites de stackexchange, quando uma resposta o ajuda, o caminho para agradecer às pessoas é fazer um voto positivo e aceitá-la (clicando na marca de seleção à esquerda de uma resposta) se resolver o seu problema. Só estou dizendo porque parece que você não aceitou nenhuma das respostas que recebeu para suas perguntas.
terdon

Respostas:

9

Acabei de responder isso no Stack Overflow alguns dias atrás. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

No seu caso, seria semelhante a:

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

Atualizar

O * em um dos outros exemplos ".r [0-9] * $" também encontra registros que terminam em 'r', pois o quantificador * significa 0 ou mais.

Zero absoluto
fonte
Oi cpattersonv1 - obrigado por responder dir * / s / b | findstr \ .r [0-9] * $ works
chz
O findstr parece não reconhecer o símbolo 1 ou muitos '+'
Scott Chu
@ScottChu inicia uma nova pergunta com um exemplo. (Eu respondi isso há 5 anos.)
AbsoluteƵERØ
0

Minha sugestão para você é fazer isso com grep- um utilitário para sistemas do tipo UNIX que foi portado para o Windows e pode corresponder a linhas usando expressões regulares.

grepestá incluído no pacote MSYS do MinGW, o instalador pode ser encontrado aqui . (instale apenas o MSYS)

Então você terá que adicionar ferramentas MSYS à sua variável PATH, o diretório dafeult para MSYS é C:\MinGW\msys\1.0\bin

Finalmente, você pode fazer sua busca com este comando:

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

... o que significa: "obter saída de ls -a(lista de arquivos, incluindo arquivos ocultos) e passá-la para grep, corresponder linhas que se parecem com . .r [0-9] * (com pelo menos um caractere simbolizado por cada asterisco)".

gronostaj
fonte
oi gronostaj obrigado pela resposta; Eu tentei$ 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
Oi, eu ainda não consigo obter o nome completo do caminho do nome do arquivo; como faço isso ? por exemplo, c:\pager\test.jar.r46521em oposição a (entrada padrão): test.jar.r46521
chz 24/03
ls | grep é o mesmo que dir | findstr no Windows.
AbsoluteZero
0

Você pode tentar isso:

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

Para obter ajuda, digite findstr /?.

Endoro
fonte
Oi mfm4aa obrigado por responder - não consigo funcionar; Eu tentei todas as combinações e nenhum dá resposta listada ant: Por exemplo, em linhaC:\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
Por favor, tente:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro
Oi MFM obrigado por escrever - eu ainda não consigo encontrarC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
CHZ
:) basta digitar dir /aa| findstr .r[0-9]*$. Isso funciona aqui ...
Endoro 24/03
Oi Endoro obrigado por responder. Não funcionou - diz Arquivo não encontrado
chz 29/03