Lui*_*ira 5 nautilus unity directory symbolic-link
好的,前段时间我发现了 nautilus 中的一个 bug。
/tmp$ mkdir test/
/tmp$ mkdir test2/
/tmp$ echo "very important stuff" > test/important-file.txt
/tmp$ ln -s /tmp/test/ test2/test
Run Code Online (Sandbox Code Playgroud)
如果您尝试mv test2/test .bash 足够聪明来回答:
mv: «test2/test» and «./test» identify the same file
Run Code Online (Sandbox Code Playgroud)
我在另一个位置创建了一个符号链接来测试(一个包含文件的目录),然后我将符号链接移动到目录所在的位置
但是,鹦鹉螺进入游戏:
Nautilus 知道符号链接是一个目录,它好心地让我合并它们:
现在,我合并了它们(我显然认为这是两个不同的目录)。结果……
tmp$ ls -la
lrwxrwxrwx 1 cool-user best-group-ever 9 août 26 23:51 test -> /tmp/test
Run Code Online (Sandbox Code Playgroud)
好的。所以我丢失了我的目录(这是正常的,因为我覆盖了它)并最终得到了一个无用的循环符号链接,但是......我的important-file.txt? 它有一个 inode,它不再被我系统中的任何目录引用。
显然,我没有在便利贴中写那个 inode ......那么,它在哪里?。有没有办法找到每个文件都没有被任何目录引用的inode?
作为一个额外的问题:这是鹦鹉螺的预期行为,还是一个错误?
为什么以及如何发生在我身上是一个很长的故事,但我的目录中有一些非常重要(和机密)的文件,我想取回
我将发布我的答案,但我不接受它,因为它似乎在任何意义上都不是一个好的答案(至少在效率或完整性方面)。
这需要一个程序(我用 C 语言编写)来递归地遍历整个目录树,将每个引用的 inode 注册到有序列表中(避免重复),然后将其与实际的 inode 列表进行比较。
区别在于缺少文件