¿Cómo evito que sed -i destruya los enlaces simbólicos?

Pregunta:

¿Por qué sed -i ejecutado en un enlace simbólico destruye ese enlace y lo reemplaza con el archivo de destino? ¿Cómo evitar esto?

p.ej.

$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:46 pet
lrwxrwxrwx 1 madneon madneon 6 mar 23 16:48 pet_link -> pet

$ sed -i 's/cat/dog/' pet_link

$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:48 pet
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:49 pet_link

¿Y por qué no se considera un error?

Respuesta:

La -i / --in-place edita un archivo en su lugar. De forma predeterminada, sed lee el archivo dado, lo procesa y lo convierte en un archivo temporal, luego copia el archivo temporal sobre el original, sin verificar si el original era un enlace simbólico.

GNU sed tiene un --follow-symlinks , que hace que se comporte como usted quiere:

$ echo "cat" > pet
$ ln --symbolic pet pet_link
$ sed --in-place --follow-symlinks 's/cat/dog/' pet_link
$ cat pet
dog

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım