Python 随时间跟踪文件
我的想法是在两个时间点,Python 随时间跟踪文件,python,file,file-io,filesystems,Python,File,File Io,Filesystems,我的想法是在两个时间点,T1和T2之间跟踪文件系统中的特定文件。这里的重点在于将文件视为文件系统中唯一的实体。一种可以改变数据和属性但仍然保持其唯一身份的方法 最终目标是通过在T1处捕获并记录文件的数据散列和创建/修改属性,并将其与T2处的等价物进行比较,来确定文件的数据是否(不情愿地)在T1和T2之间发生了更改。如果所有属性都未更改,但哈希值未验证,则可以说存在问题。在所有其他情况下,我们可能愿意说更改的哈希是修改的结果,而未更改的哈希和未更改的修改属性是文件(数据)根本没有更改的结果 现在,
T1
和T2
之间跟踪文件系统中的特定文件。这里的重点在于将文件视为文件系统中唯一的实体。一种可以改变数据和属性但仍然保持其唯一身份的方法
最终目标是通过在T1
处捕获并记录文件的数据散列和创建/修改属性,并将其与T2
处的等价物进行比较,来确定文件的数据是否(不情愿地)在T1
和T2
之间发生了更改。如果所有属性都未更改,但哈希值未验证,则可以说存在问题。在所有其他情况下,我们可能愿意说更改的哈希是修改的结果,而未更改的哈希和未更改的修改属性是文件(数据)根本没有更改的结果
现在,有几种引用文件的方法以及相应的缺点:
- 文件路径:但是,如果文件移动到其他位置,此方法将失败
- 文件数据的数据散列:允许找到文件,或者更确切地说是指向磁盘上文件数据的指针,即使指针已移动到其他目录,但数据无法更改或者此方法也失败
T1
处检索特定文件的fileId,以跟踪T2
处的文件,即使该文件已更改其位置,因此不需要将其视为新文件
我知道pywin提供的两种方法win32file.GetFileInformationByHandle()
和win32file.GetFileInformationByHandleEx()
,但它们显然局限于特定的文件系统,破坏了跨平台兼容性,偏离了跟踪文件的通用方法
我的问题很简单:是否有其他想法/理论来跟踪文件,最好是跨平台/FSs
欢迎大家集思广益 一般来说,这是不可行的,因为文件身份的概念是一种幻觉(类似于物理身份的幻觉,但这不是一个哲学论坛)
stat-f%i
检查该编号:
$ touch file.txt
$ stat -f %i file.txt
4828200
$ vim file.txt
...make changes to file.txt...
$ stat -f %i file.txt
4828218
$touch file.txt
$stat-f%i file.txt
4828200
$vim file.txt
…对file.txt进行更改。。。
$stat-f%i file.txt
4828218
一般来说,这是不可行的,因为文件身份的概念是一种幻觉(类似于物理身份的幻觉,但这不是一个哲学论坛)
stat-f%i
检查该编号:
$ touch file.txt
$ stat -f %i file.txt
4828200
$ vim file.txt
...make changes to file.txt...
$ stat -f %i file.txt
4828218
$touch file.txt
$stat-f%i file.txt
4828200
$vim file.txt
…对file.txt进行更改。。。
$stat-f%i file.txt
4828218
对文件内容进行MD5散列怎么样。在不同的时间实例上检查md5散列?在linux文件系统上(
ext
我猜),您有inode,如果我没有弄错的话,这些inode在文件移动中会保持不变。然而,在windows上。。。我不确定。这是个好问题。您可能需要编写一些特定于平台的代码,只需涵盖所有基础。@SidharthShah:他涵盖了这一点。如果文件在T1和T2之间移动和修改,那么您就完蛋了。散列将有所不同;您将无法再次找到该文件。您可能必须执行一些内核级别的操作,挂接到移动文件和修改文件的任何内容,并保留日志somewhere@Mark:太好了,听起来像是NTFS/FAT(?)上的文件索引:GetFileInformationByHandleEx
允许您检索nFileIndexLow
和nFileIndexHigh
,该文件与单个封闭系统上的VolumeSerialNumber
组合唯一标识文件。跟踪功能非常适合消除手动任务,即验证位于T1
的位置a中的文件是否与位于T1
的位置B中的文件相同,这将是一种不切实际的方法,尤其是在较大的文件树上。对文件内容进行MD5哈希处理如何。在不同的时间实例上检查md5散列?在linux文件系统上(ext
我猜),您有inode,如果我没有弄错的话,这些inode在文件移动中会保持不变。然而,在windows上。。。我不确定。这是个好问题。您可能需要编写一些特定于平台的代码,并且只需覆盖所有基础。@Si