检查文件系统是否支持硬链接

2024-06-09 13:51:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个备份脚本,它使用硬链接来不为未修改的文件占用空间。在

我想检查一个给定的文件系统(从特定的目录中确定)是否支持脚本的开始处的硬链接-否则,在需要创建第一个硬链接之前,它可能会执行到一半(复制多个文件),导致脚本因异常而退出(我可以通过恢复更改或悄悄地把硬链接改成完整的拷贝,但我也不想这样——如果这会影响到这个问题,我宁愿不开始)。在

那么,如果唯一可用的输入是一个包含目录位置的字符串(例如"F:\\Backups"或类似的字符串),我如何检查文件系统是否支持硬链接?在

否则,有没有一种好方法可以检查特定目录所在的文件系统的类型
我想可以把它拉出来,然后从那里计算出它是否有支撑?在


Tags: 文件方法字符串目录脚本类型链接空间
1条回答
网友
1楼 · 发布于 2024-06-09 13:51:51

我可以这样解决这个问题:复制文件有三种选择:

  1. 在Unix上,可以使用^{}。在
  2. 在Windows上,可以使用如下函数:

    def CreateHardLink(src, dst):
        import ctypes 
        if not ctypes.windll.kernel32.CreateHardLinkA(dst, src, 0):
            raise OSError
    

    (免责声明:我还没有测试过。我们的想法是使用kernel32api。)

  3. 如果所有这些都失败了,您仍然可以制作常规文件副本(例如,使用shutil.copy2)。在

然后,您可以在脚本开始时用一个临时文件(稍后删除)测试这3个函数。这3个函数中的第一个成功(即第一个不引发Exception)是制作实际备份副本的一个很好的候选函数。在

这个思想遵循一个strategy pattern,其中您必须选择一个函数,该函数接受源文件名和目标文件名,并尽最大努力以您想要的方式复制。在

让我再补充一件事:为了选择复制策略而检测文件系统并不是一个很好的实践,同样地,检测浏览器不是在Javascript中执行不同操作的好实践。最好尝试使用一个特性,并准备好捕捉异常或处理错误,以产生另一个结果。在

相关问题 更多 >