Cambio de nombre de elemento de archivo con corchetes

Cambio de nombre de elemento de archivo con corchetes

Estoy usando macOS X, ingresando esto en la terminal para cambiar el nombre de algunas cosas:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject()/newObject("green")/g;' {} \;

Que debería cambiar el nombre de todos:

getGreenObject()

con

newObject("green")

pero lo que hizo fue reemplazar getGreenObject() con esto:

newObject("green")()

lo que ha resultado en toneladas de errores. ¿Parece que el comando no reconoce "()" los corchetes de apertura y cierre?

¿Cómo puedo solucionar todos estos errores ahora con el mismo comando?

Respuesta1

Los paréntesis se tratan como parte de la sintaxis de la expresión regular (indican que su contenido debe tratarse como un grupo) en lugar de caracteres literales que deben coincidir. Para decirle al analizador de expresiones regulares que los trate como caracteres literales, puede escaparlos con barras invertidas:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject\(\)/newObject("green")/g;' {} \;

Ahora: ¿tiene una copia de seguridad anterior a que esto sucediera para poder volver e intentarlo de nuevo? Al realizar cualquier cambio masivo como este, siempre debe asegurarse de que su copia de seguridad esté actualizada (tiene una copia de seguridad, ¿verdad?) y también ejecutar una pequeña prueba antes de liberarla en su código base principal.

Si no tiene una copia de seguridad a la que volver, probablemente pueda solucionarlo de esta manera:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/newObject\("green"\)\(\)/newObject("green")/g;' {} \;

Tenga en cuenta que dije probablemente. Aquí se aplican las mismas recomendaciones: primero asegúrese de tener una copia de seguridad actualizada y pruébela primero en algunos archivos. Soynoresponsable si esto destruye irreversiblemente su código base.

información relacionada