Pregunta:
Digamos que tengo dos archivos file1
y file2
:
$ echo aaa >file1
$ ln file1 file2
Luego verifico que los inodos son los mismos:
$ ls -i
18749779 file1 18749779 file2
lo que muestra que los dos archivos son realmente iguales. Ahora edito file1
en Emacs y agrego una línea con, por ejemplo, el texto bbb
, lo bbb
y salgo de Emacs.
Ahora obtengo:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Entonces el vínculo duro está roto. Tenga en cuenta que esto no sucede cuando edito el archivo en vim
, o si simplemente hago echo bbb >>file1
..
¿Cómo puedo evitar que Emacs rompa enlaces duros?
Actualizar:
Tenga en cuenta que tengo
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
en mi archivo de inicio ~/.emacs
. Si edito file1
usando emacs -Q file1
lugar, obtengo un archivo llamado file1~
en el directorio actual que se vincula al file2
(tiene el mismo inodo) pero el file1~
no ha sido modificado (por lo que es idéntico al file1
) .. Esto no es lo que deseo. Me gustaría que tanto el file1
como el file2
fueran el mismo archivo e incluyeran el contenido del archivo actualizado.
Respuesta:
@Hakon resolvió su propio problema con:
(setq backup-by-copying t)
Si prefiere conservar el comportamiento predeterminado y usar la back-up-by-copying
solo para archivos vinculados de forma rígida, puede usar esto en su lugar (y dejar la backup-by-copying
configurada en nil
):
(setq backup-by-copying-when-linked t)
Además, como lo señaló @Harald, puede configurar la back-up-by-copying
como una variable local de archivo, para activar esta función solo para archivos individuales.
La explicación de este comportamiento del manual de Emacs:
Los archivos de respaldo se pueden hacer copiando el archivo antiguo o renombrándolo. Esto marca la diferencia cuando el archivo antiguo tiene varios nombres (vínculos físicos). Si se cambia el nombre del archivo antiguo al archivo de copia de seguridad, los nombres alternativos se convertirán en nombres para el archivo de copia de seguridad. Si, en cambio, se copia el archivo antiguo, los nombres alternativos seguirán siendo nombres para el archivo que está editando, y los contenidos a los que se acceda mediante esos nombres serán los nuevos contenidos.
Consulte la página vinculada para obtener más información.