使用cp在命令行复制目录时出错

时间:2016-05-06 20:33:01

标签: bash macos unix command-line cp

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

2 个答案:

答案 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,看看是否能解决问题。

您可能会看到此问题的另一个原因是该权限是否真的被拒绝。也就是说,如果您尝试复制到没有超级用户权限的其他用户拥有的文件夹中。