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/d
a 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
/ chmod
para que seu usuário atual possa acessar a pasta.
Nota: sudo cd
nã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 -a
em vez de cp -r
. Este último pode não preservar alguns atributos do arquivo.
Responder4
Em vez de alterar o cp
comando, você poderia executar sudo
como um usuário específico fazendo algo como
sudo -u thisUser cp -r /a/b /c/d
No entanto, isso funcionará apenas se thisUser
tiver permissões para/a/b