Ao copiar diretórios com sudo ele copia apenas o primeiro nível de sua hierarquia

Ao copiar diretórios com sudo ele copia apenas o primeiro nível de sua hierarquia

Esta pergunta também foi feitaaqui.

Quando copio algum diretório (dir) recursivamente com o sudo no bash, ele copia apenas o primeiro nível da hierarquia do diretório, mas quando usado sem o sudo, ele copia o diretório com todos os seus subdiretórios, embora os comandos na linha de comando tenham a diferença apenas no presença de sudo.

Por que isso acontece?

Por exemplo:

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

Responder1

Quando você faz isso, sudo cp -r /a/b /c/da pasta é copiada /c/d/como root com root como proprietário, portanto você obtém umPermissão negadacomo você precisa de permissão root para abrir o diretório, tente abrir /c/d/em um Terminal Root; alternativamente, você precisa alterar o proprietário do arquivo ou corrigir a permissão usando chown/ chmodpara que seu usuário atual possa acessar a pasta.

Nota: sudo cdnão funcionará porque cdé um comando shell, não um programa.

Responder2

Talvez /c/d tivesse permissões 700 com um proprietário diferente. Tentar sudo chmod -R 755 /c/d.

Responder3

Prefiro usar cp -aem vez de cp -r. Este último pode não preservar alguns atributos do arquivo.

Responder4

Em vez de alterar o cpcomando, você poderia executar sudocomo um usuário específico fazendo algo como

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

No entanto, isso funcionará apenas se thisUsertiver permissões para/a/b

informação relacionada