¿Encuentra nombres de archivo con cierto patrón en la línea de comandos de Windows?

10

Intentando encontrar cualquier archivo de cierto patrón en un directorio y sus subdirectorios. Lo intenté:

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

con la esperanza de encontrar archivos como

abc.txt.r12222
tjy.java.r9994

Donde se agrega un número después de la letra r, hecho por SVN.

¿Qué estoy haciendo mal?

chz
fuente
3
¡Bienvenido a SU! En los sitios de stackexchange, cuando una respuesta lo ha ayudado, la forma de agradecer a las personas es votar su respuesta y aceptarla (haciendo clic en la marca de verificación a la izquierda de una respuesta) si resolvió su problema. Solo digo porque parece que no has aceptado ninguna de las respuestas que has recibido para tus preguntas.
terdon

Respuestas:

9

Acabo de responder esto en Stack Overflow hace un par de días. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

En su caso, se vería así:

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

Actualizar

El * en uno de los otros ejemplos ".r [0-9] * $" también encuentra registros que terminan en 'r' ya que el cuantificador * significa 0 o más.

Cero absoluto
fuente
Hola cpattersonv1: gracias por responder dir * / s / b | Findstr \ .r [0-9] * $ funciona
chz
parece que find no reconoce el 1 o muchos símbolos '+'
Scott Chu
@ScottChu comienza una nueva pregunta con un ejemplo. (Respondí esto hace 5 años.)
AbsoluteƵERØ
0

Mi sugerencia para usted es hacer eso con grep: una utilidad para sistemas similares a UNIX que se ha portado a Windows y puede hacer coincidir líneas usando expresiones regulares.

grepse incluye con el paquete MSYS de MinGW, el instalador se puede encontrar aquí . (instalar solo MSYS)

Luego tendrá que agregar herramientas MSYS a su variable PATH, el directorio dafeult para MSYS es C:\MinGW\msys\1.0\bin

Finalmente puedes hacer tu serach con este comando:

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

... lo que significa: "obtener una salida de ls -a(lista de archivos incluidos los ocultos) y pasarlo a grep, las líneas de solape que se parecen . .R [0-9] * (con al menos un carácter simbolizado por cada asterisco)".

gronostaj
fuente
hola gronostaj gracias por la respuesta; Lo intenté$ 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
Hola, todavía no puedo obtener el nombre completo de la ruta del nombre de archivo; Cómo puedo hacer eso ? por ejemplo, c:\pager\test.jar.r46521en lugar de (entrada estándar): test.jar.r46521
chz
ls | grep es lo mismo que dir | FindStr en Windows.
AbsoluteƵERØ
0

Puedes probar esto:

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

Para obtener ayuda, escriba findstr /?.

Endoro
fuente
Hola mfm4aa, gracias por responder, parece que no funciona; He intentado todas las combinaciones y ninguna da una respuesta de la lista de hormigas: por ejemplo, en líneaC:\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 intente:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro
Hola mfm gracias por escribir - todavía no puedo encontrarC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
chz
:) simplemente escriba dir /aa| findstr .r[0-9]*$. Eso funciona aquí ...
Endoro
Hola Endoro, gracias por responder. No funcionó - dice File Not Found
chz