2017-07-28 46 views
0

我想制作一个程序: 复制&粘贴一个目录并将其放入一个新目录。我不认为我的代码是正确的,我认为这是简单的只是将文件移动到一个完全不同的位置文件传输w/python

import os 
import shutil 
login = os.getlogin() 

SOURCE_FILE_DEKSTOP = '/Users/%s/Desktop' % (login) 
DST_FILE_WD = 'Users/%s/WorkDocs' % (login) 

shutil.move(SOURCE_FILE_DEKSTOP, DST_FILE_WD) 

我收到此错误以及

Traceback (most recent call last): 
    File "/Users/gomcrai/pythings/fileTransfer.py", line 8, in <module> 
    shutil.move(SOURCE_FILE_DEKSTOP, DST_FILE_WD) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/shutil.py", line 300, in move 
rmtree(src) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 256, in rmtree 
    onerror(os.rmdir, path, sys.exc_info()) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 254, in rmtree 
os.rmdir(path) 
OSError: [Errno 13] Permission denied: '/Users/gomcrai/Desktop' 
+1

那么......你有权限移动该文件吗? – Makoto

+0

我是一个域管理员,我这样做的帐户设置为本地管理员,所以我应该有能力做到这一点。 OS = Mac,让任何人都需要知道 –

回答

1

如果你真的想复制,而不是移动,那么shutil.copytree是更好的选择。 move会,移动条目,删除原来的。

由于Mac在其认为应始终存在的文件夹上拥有访问控制列表,因此它出现了一个错误,因为它用于存储桌面上可见的所有文件,因此其中之一就是Desktop。由于shutil.move正试图删除它,因此它符合ACL并被拒绝。

ls -ale /Users/gomcrai/Desktop应该表现出你的ACL,显示是这样的:0: group:everyone deny delete

如果您想削减和粘贴,而不是复制并粘贴目录,你既可以使用os.listdiros.walk并找到Desktop/中的文件和文件夹并移动所有这些文件和文件夹,或使用shutil.copytreeDesktop,然后删除Desktop中的所有内容,同时单独保留该文件夹。

+0

我绝对想要复制,因为我们在这里有信息保护政策,我们必须在原始设备上保留至少2周的信息。非常感谢你 ! –

+0

我也希望它覆盖目标文件夹,如果有一个已经在那里我重新调整我的代码来创建一个文件夹在我的目的地,但如果它已经存在,我希望它只是覆盖它@Simon Fraser –