使用 sudo 复制目录时,它仅复制其层次结构的第一级

使用 sudo 复制目录时,它仅复制其层次结构的第一级

这个问题也被问到这里

当我在 bash 中使用 sudo 递归复制某个目录 (dir) 时,它只会复制目录层次结构的第一级,但是当不使用 sudo 时,它会复制该目录及其所有子目录,尽管命令行中的命令只有在 sudo 存在的情况下才有区别。

为什么会发生这种情况?

例如:

k@l:/$ tree
.
|
|__a
|  |
|  |__b
|     | 
|     |__1.htm   
|
|__c
k@l:/$ sudo cp -r /a/b /c/d
k@l:/$ cd /c
k@l:/c$ ls
d
k@l:/c$ cd d
bash: cd: /c/d: Permission denied
k@l:/c$ tree
.
|__d [error opening dir]

1 directory, 0 files

答案1

当你这样做时,sudo cp -r /a/b /c/d文件夹将被复制到/c/d/root 并以 root 为所有者,因此你会得到一个没有权限由于您需要 root 权限才能打开目录,请尝试/c/d/在 Root 终端中打开;或者,您需要更改文件所有者或使用chown/修复权限chmod,以便当前用户能够访问该文件夹。

注意:由于是 shell 命令而不是程序,因此sudo cd不起作用。cd

答案2

也许 /c/d 的权限为 700,但所有者不同。请尝试sudo chmod -R 755 /c/d

答案3

我宁愿使用cp -a而不是cp -r。后者可能不会保留某些文件属性。

答案4

您无需更改cp命令,而是可以sudo以特定用户身份运行,执行如下操作

sudo -u thisUser cp -r /a/b /c/d

thisUser尽管如此,这只有在具有以下权限时才有效:/a/b

相关内容