Como dice el título, estoy buscando un comando/herramienta, preferiblemente algo que se ejecute desde la terminal (estoy usando Ubuntu en un servidor remoto), que pueda reemplazar una parte específica de varios directorios a la vez. La estructura de carpetas es así:
Example.of.Structure[app]
Another.Example[app]
Third.Example.of.Structure[app]
Y quiero cambiar el nombre de todas las carpetas, para que la parte [aplicación] se elimine de los nombres de las carpetas.
Intenté incursionar con RegEx básica. Coincidiendo con los corchetes y el texto dentro de ellos.
Lo cual parece funcionar bien cuando lo uso para"encontrándolo"- pero no estoy realmente seguro de cómo ponerlo en un comando.
La expresión regular que se me ocurrió para encontrar el texto dentro de los corchetes (incluidos los corchetes) fue:\[\w+\]
¿Pero cómo pongo esto en un comando?
Gracias.
Respuesta1
Realmente no necesitas una expresión regular para esto. Un simple globo de shell más una expansión de parámetros lo hará:
$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/
(elimine el echo
una vez que esté satisfecho de que los reemplazos propuestos sean correctos).
Si desea utilizar una herramienta basada en expresiones regulares, entonces la basada en Perl rename/prename
es la opción obvia:
$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)
(elimine el -n
una vez que esté satisfecho de que los reemplazos propuestos sean correctos).
Ambos coinciden con elprimeroaparición del patrón. Si existe la posibilidad de que el [app]
patrón pueda ocurrir en otro lugar, considere anclar la coincidencia al final del patrón. VerAnclajes de inicio y fin de cuerda