Al copiar directorios con sudo, copia solo el primer nivel de su jerarquía

Al copiar directorios con sudo, copia solo el primer nivel de su jerarquía

Esta pregunta también fue hechaaquí.

Cuando copio algún directorio (dir) de forma recursiva con sudo en bash, copia solo el primer nivel de la jerarquía de directorios, pero cuando se usa sin sudo, copia el directorio con todos sus subdirectorios, aunque los comandos en la línea de comandos solo tienen la diferencia en el presencia de sudo.

¿Por qué pasó esto?

Por ejemplo:

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

Respuesta1

Cuando lo hace, sudo cp -r /a/b /c/dla carpeta se copia /c/d/como raíz con la raíz como propietario, por lo tanto, obtiene unPermiso denegadodado que necesita permiso de root para abrir el directorio, intente abrirlo /c/d/en una terminal raíz; alternativamente, debe modificar el propietario del archivo o corregir el permiso usando chown/ chmodpara que su usuario actual pueda acceder a la carpeta.

Nota: sudo cdno funcionará ya que cdes un comando de shell, no programas.

Respuesta2

Quizás /c/d tenía permisos 700 con un propietario diferente. Intentar sudo chmod -R 755 /c/d.

Respuesta3

Prefiero usar cp -aen lugar de cp -r. Es posible que este último no conserve algunos atributos del archivo.

Respuesta4

En lugar de cambiar el cpcomando, podrías ejecutarlo sudocomo un usuario específico haciendo algo como

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

Sin embargo, esto funcionará sólo si thisUsertiene permisos para/a/b

información relacionada