我需要将脚本中的文件从ext4hdd上的本地文件夹移动到一个安装了windows共享的文件夹中,比如:mount -t cifs -o username=username,password=password,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777 //192.168.1.120/storage /mnt/storage
我试图使用os.rename(src,dst)
、shutil.move(src,dst)
甚至subprocess.call(['mv', src,dst], Shell=True)
或{
获取每个文件的错误,根据我所知,是因为linux文件所有权/权限。。在
例如,mv /mnt/networkshare/file1.txt /tmp/file1.txt
很好,但是
mv /tmp/file1.txt /mnt/networkshare/file1.txt
结果
^{pr2}$我假设os.rename(src,dst)
和shutil.move(src,dst)
也会出现同样的问题,但他们并不那么健谈。在
shutil.move(src,dst)
告诉我:[Errno 1]不允许的操作:'/mnt/networkshare/file1.txt'
并且os.rename(src,dst)
表示:[Errno 18]跨设备链接无效
编辑:pcmanfm能够从本地到远程剪切和粘贴。在
加上。。令我困惑的是有些文件被移走了。。在
os.rename
无法跨文件系统移动文件,因为底层的^{至于
shutil.move
失败的原因,答案也在于its documentation:那我们check ^{} 吧!在
所以,
copystat
失败了-因为它不能在这样的挂载上设置文件元数据。在由于
shutil
似乎没有一个方法可以在不复制元数据的情况下重命名,因此我们必须自己来做。让我们看看它的源代码:看来,正如所预测的,我们所要做的就是用
^{pr2}$copy2
替换copy
。我们可以复制源代码并重命名函数,或者如果你今天觉得幸运的话。理解the consequences of such留给读者作为练习
相关问题 更多 >
编程相关推荐