Empecé a aprender powershell hace un par de días, y no pude encontrar nada en Google que haga lo que necesito, así que por favor tengan en cuenta mi pregunta.
Me han pedido que reemplace algunas cadenas de texto en varios archivos. No necesariamente conozco la extensión de los posibles archivos de destino y tampoco sé su ubicación. Hasta ahora he logrado buscar recursivamente en el directorio ( get-ChildItem -recurse
) y encontrar la cadena que estaba buscando con get-content y select-string:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
El problema es que puedo ver las ocurrencias del texto que estoy buscando, pero no sé cómo decirle a PS que devuelva la ruta y el nombre de todos los archivos coincidentes.
¿Cómo puedo obtener el nombre y la ubicación de los archivos que contienen la expresión que estoy buscando?
Respuestas:
Esto debería dar la ubicación de los archivos que contienen su patrón:
fuente
name
parámetro. Intente agregar| %{Move-Item $_.name <destination>}
Get-ChildItem -Recurse | Select-String "dummy" -List | Select Path
devuelve solo la primera coincidencia para cada archivo, por lo que puede ser un poco más eficiente y evita la necesidad de agruparlostxt
archivos, si lo usaGet-ChildItem -Recurse -Filter *.txt
en su lugarforeach
bucle si está haciendo operaciones grandes como esa. Se vuelve muy complicado cuando intentas hacer todo eso en una línea y es muy fácil cometer un gran error. Hablo por experienciaAquí hay una variedad de respuestas precisas, pero aquí está el código más conciso para varias variaciones diferentes. Para cada variación, la línea superior muestra la sintaxis completa y la inferior muestra la sintaxis concisa.
El ítem (2) es una forma más concisa de las respuestas de Jon Z y manojlds, mientras que el ítem (1) es equivalente a las respuestas de vikas368 y buygrush.
Listar objetos FileInfo para todos los archivos que contienen patrones:
Lista de nombres de archivos para todos los archivos que contienen patrones:
Listar objetos FileInfo para todos los archivos que no contienen patrón:
Lista de nombres de archivos para todos los archivos que no contienen patrón:
fuente
-List
parámetro deSelect-String
Esto mostrará la ruta, el nombre de archivo y la línea de contenido que encontró que coincide con el patrón.
fuente
Canaliza el contenido de tu
a
fl *
Verá que la ruta ya se devuelve como una propiedad de los objetos.
SI solo desea la ruta, use
select path
oselect -unique path
para eliminar duplicados:fuente
-File
interruptorGet-ChildItem
o terminará con una cascada interminable de errores al intentar llamarGet-Content
a los directorios.(Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy").FullName
personas parecen olvidar que PowerShell está orientado a objetos; en caso de duda, busque una propiedadAsí es como lo haría, no necesita obtener contenido:
o
Para ver cuáles son las diferentes propiedades ...
Esto es mas rapido. El segundo argumento es -filter:
fuente
select Pattern, LineNumber, Filename
para obtener resultados más concisos. La línea devuelve TODO en la línea que contiene su cadena de patrón. También puede enviarlo fácilmente a un csv si lo desea.Esto le dará los detalles completos de todos los archivos.
fuente
-r
funcionaba. Supuse que siempre tenías que hacer-Recurse
Para mantener los detalles completos del archivo en la matriz resultante, puede usar una ligera modificación de la respuesta publicada por vikas368 (que no parece funcionar bien con el autocompletado ISE):
o en resumen:
fuente
Si busca en un directorio, puede hacerlo:
fuente
Esto mostrará una lista de la ruta completa a cada archivo que contiene la cadena de búsqueda:
Tenga en cuenta que no muestra un encabezado sobre los resultados y no muestra las líneas de texto que contienen la cadena de búsqueda. Todo lo que le dice es dónde puede encontrar los archivos que contienen la cadena.
fuente
Modifiqué una de las respuestas anteriores para darme un poco más de información. Esto me ahorró una segunda consulta más adelante. Fue algo como esto:
Puedo especificar la ruta y los comodines de archivo con estas estructuras, y guarda el nombre de archivo, el número de línea y la línea relevante en un archivo de salida.
fuente