Mac OS X Yosemite v.10.10.5。
我正在尝试使用cp
命令将一个Git目录复制到另一个目录。
cp -r /path/to/dir/from/ /path/to/dir/to/
返回此错误:
cp: /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128: Permission denied
此错误每次返回一次(我相信,但尚未验证,是)目录中的每个文件。
我第一次运行命令时,正常运行,没有错误。但是,在没有对任何文件进行任何更改的情况下,我运行命令的第二次(以及后续次),我得到了错误。
发生了什么事?我该如何解决这个问题?
编辑:
回应评论中的问题:
ls -l /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128
显示什么?
答案显示:
-r--r--r-- 1 myusername staff 6151 May 6 00:45 /path/to/dir/to/.git/objects/00/00ad2afeb304e18870d4509efc89fedcb3f128
答案 0 :(得分:2)
您获得Permission Denied
的原因是因为您试图覆盖目标目录中已存在的文件,该文件上设置了只读权限。由于您似乎正在尝试覆盖它,因此您可以删除目标目录(如果它在复制操作之前存在)。您还应该使用-R
,而不是-r
...
cp实用程序的历史版本有-r选项。这个 履行 支持该选项;然而,强烈建议不要使用它 无法正确复制特殊文件,符号链接或fifo。
使用此类命令可以解决您的问题:
[[ ! -d dest ]] || rm -rf dest ; cp -R src dest
以上检查dest
是否存在;如果它以递归方式删除它,则将source
复制到dest
,
答案 1 :(得分:1)
此操作可能需要[ServiceProvider FieldNameToString:enumValue];
。 cp -rp
保留与文件关联的用户和组ID。尝试重新使用-p
,看看是否能解决问题。
您可能会看到此问题的另一个原因是该权限是否真的被拒绝。也就是说,如果您尝试复制到没有超级用户权限的其他用户拥有的文件夹中。