Как я могу скопировать файлы и каталоги от одного пользователя другому пользователю в системе Unix так, чтобы полномочия файла не изменялись? Получатель не является владельцем, но у меня есть корневые полномочия.
Спасибо.
Команда 'CP' POSIX обеспечивает'cp -pPR source-dir target-dir
'для копирования файловых иерархий вокруг. Это сохраняет большинство метаданных. Если выполнено корнем, то копия будет иметь владельца и группу первоначального владельца. Если выполнено простыми смертными (не корень), то человек, запускающий скрипт, будет владеть файлами, и обычно, группа для файлов будет эффективной группой человека, запускающего скрипт. (Исключение было бы то, если целевой каталог имеет набор битов SGID - или Вы работаете на MacOS X.),
Другой способ сделать его, который может быть выгодным, состоит в том, чтобы использовать tar
или cpio
. Основное преимущество их - то, что они обрабатывают жесткие ссылки лучше. cp
управляйте рассматривает каждое имя файла как отдельный файл, даже если это - жесткая ссылка на другой файл, уже скопированный. В отличие от этого, archivers распознают общность и сохраняют жесткие ссылки, уменьшая объем данных, который будет передан. Еще одно преимущество archivers состоит в том, что можно переместить файлы между машинами.
Необходимо будет проверить что копия машины tar
способно к выполнению, в чем Вы нуждаетесь, но с tar GNU (и tar BSD/MacOS), можно сделать:
cd source-dir
tar -cf - . | tar -xf - -C target-dir
И с cpio
можно сделать:
cd source-dir
find . | cpio -pdmuB target-dir
Отметьте это'find | cpio
'мог столкнуться с проблемами с экзотическими именами файлов с новыми строками в именах файлов (другие символы не доставляют неприятности AFAIK).