¿Cómo parchear un archivo que reside en/Aplicaciones (el parche no puede encontrar el archivo para parchear en la línea de entrada)?

Estoy tratando de parchear 5 archivos dentro de un paquete de aplicaciones de Mac usando el patchcomando Terminal. Los archivos que se parchearán se especifican mediante una ruta de archivo absoluta (el nombre de archivo y la ruta comienzan con una barra inclinada).

La salida cuando se ejecuta $ sudo patch -i ~/custom.patches:

can't find file to patch at input line 3
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|--- /Applications/Xyz.app/Contents/Resources/dashboard.js
|+++ /Applications/Xyz.app/Contents/Resources/dashboard.js
--------------------------
File to patch: ^C

Verifiqué que el archivo /Applications/Xyz.app/Contents/Resources/dashboard.js existe en la ruta de archivo especificada usando el lscomando.

Regresión:

  1. Intenté ejecutar el comando de parche desde la carpeta raíz usando$ cd /
  2. Intenté ejecutar el comando de parche desde la carpeta raíz con la primera barra eliminada, lo que da como resultado un resultado casi idéntico:

can't find file to patch at input line 3
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|--- Applications/Xyz.app/Contents/Resources/dashboard.js
|+++ Applications/Xyz.app/Contents/Resources/dashboard.js
--------------------------
File to patch: ^C

¿ Cómo se pueden parchear varios archivos dentro de un paquete de aplicaciones de Mac OS X usando patch?

@grgarside La diferencia es /Applications/versusApplications/

Respuestas (1)

Creo que el problema es que no estás especificando la opción p.

Del manual del parche:

For example, supposing the file name  in  the  patch file was

  /u/howard/src/blurfl/blurfl.c

setting -p0 gives the entire file name unmodified, -p1 gives

  u/howard/src/blurfl/blurfl.c

without the leading slash, -p4 gives

  blurfl/blurfl.c

and  not  specifying  -p  at  all just gives you

  blurfl.c.

Whatever you end up with is looked for either in the current directory,
or the directory specified by the -d option.

Entonces el comando debería ser algo como:

patch -p0 <custom.patch

o puede especificar el directorio al que se debe aplicar el parche:

patch -d /path/to/dir <custom.patch
-p -dparece prometedor cuando todos los archivos de parches están en la misma carpeta. -pno es una respuesta, ya que mi deseo es especificar ubicaciones de archivos de rutas absolutas desde el archivo de parche. El deseo es parchear diferentes archivos en diferentes ubicaciones de rutas absolutas.
porque -deso es cierto. el parámetro -pfunciona con los nombres de archivo que se encuentran en el archivo de parche. por lo tanto, con -p0debería poder especificar rutas de archivo absolutas