如何防止Emacs断开硬链接?


13

假设我有两个文件file1file2

$ echo aaa >file1
$ ln file1 file2

然后检查inode是否相同:

$ ls -i
18749779 file1  18749779 file2

这表明两个文件实际上是相同的。现在,我file1在Emacs中进行编辑,并添加一行带有例如text的文本bbb,然后保存并退出Emacs。

现在我得到:

$ ls -i
18749781 file1  18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa

因此,硬链接断开了。请注意,当我在中编辑文件vim或仅执行echo bbb >>file1.. 时,不会发生这种情况。

如何防止Emacs断开硬链接?

更新:

注意我有

(require 'backup-dir)
(setq bkup-backup-directory-info
      '((t  "~/.emacs-backups/" ok-create full-path )))

在我的~/.emacs初始化文件中。如果我编辑file1使用emacs -Q file1,而不是,我得到一个名为file1~在当前目录中的链接file2(具有相同的inode),但file1~并没有被修改(因此它等同于旧的file1)。这不是我的愿望。我想这两个file1file2是相同的文件,包括更新的文件内容..


3
好吧,我想我找到了解决办法:如果我添加(setq backup-by-copying t)到我的~/.emacs初始化文件,并根据需要工程..
哈康Hægland

Answers:


10

@Hakon通过以下方式解决了自己的问题:

(setq backup-by-copying t)

如果您希望保留默认行为,并且back-up-by-copying仅用于硬链接文件,则可以改用此方法(并将其保留backup-by-copyingnil):

(setq backup-by-copying-when-linked t)

此外,正如@Harald指出的那样,您可以设置back-up-by-copying为文件本地变量,以仅对单个文件启用此功能。

Emacs 手册对此行为的解释:

可以通过复制旧文件或重命名来创建备份文件。当旧文件具有多个名称(硬链接)时,这会有所不同。如果将旧文件重命名为备份文件,则备用名称将成为备份文件的名称。如果改为复制旧文件,则备用名称将保留您正在编辑的文件的名称,这些名称访问的内容将是新内容。

请参阅链接页面以进行进一步讨论。


2
请注意,可以将其设置为文件局部变量,以防不希望所有文件都具有此行为。
Harald Hanche-Olsen 2014年

@ HaraldHanche-Olsen指出!
泰勒2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.