При копировании каталогов с помощью sudo он копирует только первый уровень своей иерархии

1

Этот вопрос также был задан Вот ,

Когда я копирую некоторый каталог (dir) рекурсивно с помощью sudo в bash, он копирует только первый уровень иерархии dir, но при использовании без 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
Oleksandr Bondarenko
источник
В вашем списке есть сообщения об ошибках. Возможно, вы хотите узнать их значение в первую очередь.
n.m.

Ответы:

2

Когда вы делаете sudo cp -r /a/b /c/d папка копируется в /c/d/ как root с root как владелец, поэтому вы получите Доступ запрещен так как вам нужно разрешение root, чтобы открыть каталог, попробуйте открыть /c/d/ в корневом терминале; В качестве альтернативы вам нужно изменить владельца файла или исправить разрешение, используя chown / chmod так что ваш текущий пользователь сможет получить доступ к папке.

Замечания: sudo cd не будет работать с cd это команда оболочки, а не программы.

Lie Ryan
источник
2

Может быть, / c / d имел разрешения 700 с другим владельцем. Пытаться sudo chmod -R 755 /c/d,

jman
источник
2
+1: или ты можешь попробовать sudo chown -R me /c/d ».
Jonathan Leffler
Да, это тоже сработало бы.
jman
0

Я бы лучше использовал cp -a вместо cp -r, Последний может не сохранить некоторые атрибуты файла.

jankes
источник
0

Вместо изменения cp команда, вы могли бы запустить sudo как конкретный пользователь делает что-то вроде

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

Тем не менее, это будет работать только в том случае, если thisUser имеет разрешения для /a/b

Marco M. von Hagen
источник