Wie kann ich eine Datei patchen, die sich in / Applications befindet (Patch kann die zu patchierende Datei nicht in der Eingabezeile finden)?

3

Ich versuche, 5 Dateien innerhalb eines Mac-Anwendungspakets mit dem patchBefehl " Terminal" zu patchen . Die zu patchenden Dateien werden mit einem absoluten Dateipfad angegeben (Dateiname und Pfad beginnen mit einem Schrägstrich).

Die Ausgabe beim Laufen $ sudo patch -i ~/custom.patchist:

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

Ich habe überprüft, dass die Datei /Applications/Xyz.app/Contents/Resources/dashboard.js unter Verwendung des lsBefehls im angegebenen Dateipfad vorhanden ist .

Regression:

  1. Versucht, den Patch-Befehl über den Stammordner auszuführen $ cd /
  2. Es wurde versucht, den Patch-Befehl im Stammordner auszuführen, wobei der erste Schrägstrich entfernt wurde. Dies führt zu einem nahezu identischen Ergebnis:

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

Wie können mehrere Dateien in einem Mac OS X-Anwendungspaket mithilfe von Patches gepatcht werden patch?

Pro Backup
quelle
@grgarside Der Unterschied ist im /Applications/Vergleich zuApplications/
Pro Backup

Antworten:

3

Ich denke, das Problem ist, dass Sie nicht die Option p angeben.

Aus dem Handbuch zum Patch:

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.

Der Befehl sollte also ungefähr so ​​lauten:

patch -p0 <custom.patch

Oder Sie können das Verzeichnis angeben, auf das der Patch angewendet werden soll:

patch -d /path/to/dir <custom.patch
CML
quelle
-p -dsehen vielversprechend aus, wenn sich alle zu patchenden Dateien im selben Ordner befinden. -pist keine Antwort, da ich den absoluten Pfad der Datei innerhalb der Patch-Datei angeben möchte. Der Wunsch ist, verschiedene Dateien an verschiedenen absoluten Pfadpositionen zu patchen.
Pro Backup
denn -ddas ist wahr. Der Parameter -parbeitet mit den in der Patch-Datei gefundenen Dateinamen. so mit dem -p0sollten Sie in der Lage sein , absolute Dateipfade zu spezifizieren
CML