¿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?


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.


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)".


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 /?.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.