首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux上shutil samefile错误

Linux上shutil samefile错误
EN

Stack Overflow用户
提问于 2016-06-07 17:14:31
回答 2查看 3.1K关注 0票数 4

我有一个python脚本,它让我在使用Python2.7.3的Ubuntu12.02上遇到了困难。

PS:它在Windows上运行时没有问题。

代码语言:javascript
复制
>>> import os
>>> import shutil

>>> shutil.copy("/mnt/my_network_dive/somewhere/sample.xml", "/mnt/my_network_drive/COMPLETED/")
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.7/shutil.py", line 117, in copy
        copyfile(src, dst)
    File "/usr/lib/python2.7/shutil.py", line 69, in copyfile
        raise Error("`%s` and `%s` are the same file" % (src, dst))
shutil.Error:    `/mnt/my_network_dive/somewhere/sample.xml` and `/mnt/my_network_drive/COMPLETED/sample.xml` are the same file

检查文件的某些属性:

代码语言:javascript
复制
>>> os.path.exists("/mnt/my_network_drive/somewhere/sample.xml")
True
>>> os.path.exists("/mnt/my_network_drive/COMPLETED/sample.xml")
True
>>> os.stat("/mnt/my_network_drive/somewhere/sample.xml")
posix.stat_result(st_mode=33272, st_ino=4913809333, st_dev=25L, st_nlink=1, st_uid=1000, st_gid=0, st_size=5447, st_atime=1465311674, st_mtime=1465311674, st_ctime=1465311685)
>>> os.stat("/mnt/my_network_drive/COMPLETED/sample.xml")
posix.stat_result(st_mode=33272, st_ino=4913809333, st_dev=25L, st_nlink=1, st_uid=1000, st_gid=0, st_size=10, st_atime=1465317482, st_mtime=1465317482, st_ctime=1465317483)
>>> os.path.islink("/mnt/my_network_drive/somewhere/sample.xml")
False
>>> os.path.islink("/mnt/my_network_drive/COMPLETED/sample.xml")
False

>>> shutil._samefile("/mnt/my_network_dive/somewhere/sample.xml", "/mnt/my_network_drive/COMPLETED/sample.xml")
False

正如您所看到的,调用shutil._samefile我得到了False,但是shutil.copy仍然提高了samefile error

我是不是忘了什么?还有其他方法可以用Python移动或复制文件吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-07 17:21:10

看起来这两个文件都是指向同一个文件的硬链接。您可以知道,因为它们共享相同的inode编号。

代码语言:javascript
复制
st_ino=4913809333

Windows用户通常不会创建硬链接。它们在linux环境中更常见,这就是为什么到目前为止您可能还没有遇到这个问题。

奇怪的是,samefile返回False。您所使用的操作系统是什么?shutil._samefile只是os.path.samefile的包装器(在存在该功能的系统上)。你从os.path.samefile得到什么结果?在posix系统上,它只检查设备和inode是否匹配(在您的情况下是这样),并且应该返回True

posixpath.py

代码语言:javascript
复制
def samefile(f1, f2):
    s1 = os.stat(f1)
    s2 = os.stat(f2)
    return samestat(s1, s2)

def samestat(s1, s2):
    return s1.st_ino == s2.st_ino and s1.st_dev == s2.st_dev
票数 2
EN

Stack Overflow用户

发布于 2016-06-07 17:33:50

python 3 In shutil.copy中,有附加的参数follow_symlinks=True查看这个https://docs.python.org/3/library/shutil.html

如果follow_symlinks是false,而src是一个符号链接,那么dst将被创建为一个符号链接。如果follow_symlinks是真的,而src是一个符号链接,那么dst将是src引用的文件的副本。

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

https://stackoverflow.com/questions/37685401

复制
相关文章

相似问题

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