Ein Freund von mir weist darauf hin, dass, wenn Sie dies tun:
perl -pi.bak -e 's/foo/bar/' somefile
Wenn "somefile" tatsächlich ein Symlink ist, macht Perl genau das, was die Dokumentation sagt:
Dazu wird die Eingabedatei umbenannt, die Ausgabedatei nach dem ursprünglichen Namen geöffnet und diese Ausgabedatei als Standard für print () -Anweisungen ausgewählt. Die Erweiterung, falls angegeben, wird verwendet, um den Namen der alten Datei zu ändern und eine Sicherungskopie zu erstellen [...]
Was dazu führt, dass ein neuer Symlink "somefile.bak" auf die unveränderte reale Datei verweist und eine neue, geänderte reguläre Datei "somefile" mit den Änderungen.
In vielen Fällen ist das Verfolgen des Symlinks das gewünschte Verhalten (auch wenn der korrekte Speicherort der .bak-Datei nicht eindeutig ist). Gibt es eine einfache Möglichkeit, dies zu tun, als in einem Wrapper nach Symlinks zu suchen und den Fall angemessen zu behandeln?
( sed
Tut das Gleiche, für das, was es wert ist.)
-p -i
Ihr Skript erneut zu implementieren .