我正在尝试制作一个程序: 复制&粘贴目录并将其放置到新位置。我不认为我的代码是正确的,我认为将文件移动到完全不同的位置很简单
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'
答案 0 :(得分:1)
如果你真的想复制,而不是移动,那么shutil.copytree是一个更好的选择。 move
将移动条目,删除原始条目。
您收到错误是因为Mac在其认为应该始终存在的文件夹上有访问控制列表,而Desktop
就是其中之一,因为它用于存储所有文件在桌面上可见。由于shutil.move
正试图删除它,因此它会遇到ACL并被拒绝。
ls -ale /Users/gomcrai/Desktop
应该显示ACL,显示如下内容:0: group:everyone deny delete
如果您想剪切并粘贴而不是复制并粘贴目录,则可以使用os.listdir
或{{1}找到os.walk
中的文件和文件夹并移动所有文件和文件夹,或者使用Desktop/
上的shutil.copytree
,然后移除Desktop
内的所有内容,同时保留该文件夹。