首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能分辨出一个文件是否被重命名了吗?

你能分辨出一个文件是否被重命名了吗?
EN

Unix & Linux用户
提问于 2016-06-20 21:41:10
回答 2查看 3K关注 0票数 3

很多用于同步文件的工具都不太适合同步您的主目录。因此,为了学习Ruby,我一直在开发自己的同步工具。

我在同步工具中遇到的一个问题是,当用户重命名一个文件或删除一个文件时会发生什么。考虑到第一种情况(如果用户重命名),有什么方法可以告诉我,这不是一个新文件,而是一个已经重命名的文件?也许是我不知道的文件的唯一ID。文件描述符听起来像是要研究的东西,但我很确定这是一个不同的概念。

EN

回答 2

Unix & Linux用户

发布于 2016-06-20 23:29:43

无法确定文件是否已被重命名。

当一个文件被重命名时,它的inode号不会改变。(对于“外来的”文件系统(如网络文件系统)可能不是这样,但是对于所有“本机”Unix文件系统都是如此。)然而,相反的情况是不正确的:如果一个文件被删除,一个新的文件可以用相同的inode号创建。因此,即使您看到一个文件具有与另一个文件相同的inode编号,这也不一定意味着该文件已被重命名。

inode编号在文件存在时唯一标识该文件。这使得它适合于检测硬链接,但不适合检测重命名。

文件描述符与特定的进程相关联,在这里是无用的。

您可能会考虑这样一个启发:如果一个文件的大小、修改时间和inode号与以前相同,但是名称不同,那么它就意味着它已经被重命名了。这种启发类似于许多同步工具用于检测未更改的文件:相同的名称、大小和修改时间。

我能想到的所有工具都是基于文件的内容重命名的。和声检测重命名的文件如果至少有一个端点是远程的。一些现代版本控制系统,如git,也检测重命名的文件。

我强烈怀疑,无论您想要在rsync和声和版本控制之间进行文件同步,它都已经存在。

票数 4
EN

Unix & Linux用户

发布于 2016-06-20 21:50:12

文件描述符是在程序打开文件时为它创建的,并且只在程序再次关闭之前才有效。正如你所怀疑的:一个不同的概念。

如果文件被重新命名为inode(s)不会更改,您可以使用它,但是除非经常发生重命名,否则我怀疑它是否值得。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/290996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档