У меня есть скрипт python, который очень затрудняет работу с Ubuntu 12.02 с помощью Python 2.7.3.shutil samefile error on Linux
PS: он работает без проблем в Windows.
>>> 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
Проверка некоторых свойств файлов:
>>> 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?
Нет необходимости копировать их. Это две разные записи в каталоге, указывающие на один и тот же файл. Будучи одним и тем же файлом, нет никакого способа, которым их содержимое может отличаться. –
(Почему 'shutil._samefile' возвращает False - это другой вопрос, и, возможно, что-то, чтобы подать ошибку, но поскольку' st_dev' и 'st_ino' идентичны, нет сомнений в том, что это действительно тот же контент, на который указывают оба записи в каталоге). –
@vmenezes Первый аргумент копии в первом поле содержит погружение instread на диске, это только опечатка? –