
Я хочу скопировать все файлы и папки из одного каталога в другой.безизменение прав доступа к целевому каталогу.
Где исходная папка — 555, а папка назначения — 775. Если я использую команду ниже, место назначения изменится на 555. Мне это не нужно.
cp -r /origin/. /destination
Какой правильный синтаксис для копирования содержимого /origin? Так что /destination остается 775
У меня нет sudo.
решение1
использовать rsync
:
rsync -rlD /origin/ /destination/
Важно то , что /
в конце стоит origin/
, что говорит rsync копировать содержимое каталога, а не сам каталог. Таким образом, каталог верхнего уровня не копируется и /destination
не изменяется, за исключением файлов, которые в него добавляются.
Объяснение переключателей:
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files
решение2
Вместо копирования самого каталога скопируйте находящиеся в нем файлы.
cp -r /origin/* /destination
Если есть файлы с точкой (файлы, имя которых начинается с символа .
), они не будут скопированы, т.к. *
пропускает их. Используйте cp -r /origin/.[!.]* /destination
для копирования файлов с точкой, а также cp -r /origin/..?* /destination
если есть файлы, имя которых начинается с ..
(кроме ..
себя, что обозначает родительский каталог).