Как я могу скопировать файлы и каталоги от одного пользователя другому пользователю в системе Unix, чтобы права доступа к файлам не изменились? Получатель не является владельцем, но у меня есть права root.

Благодарю.

1 ответ1

1

Команда POSIX 'cp' предоставляет ' cp -pPR source-dir target-dir ' для копирования иерархий файлов. Это сохраняет большую часть метаданных. При запуске с правами root копия будет иметь владельца и группу исходного владельца. Если им управляют простые смертные (не root), то файлы будут выполнять лицо, выполняющее сценарий, и, как правило, группа файлов будет эффективной группой пользователя, выполняющего сценарий. (Исключение будет, если в целевом каталоге установлен бит SGID - или вы работаете в MacOS X.)

Другой способ сделать это, который может быть полезным, - использовать tar или cpio . Основное их преимущество заключается в том, что они лучше обрабатывают жесткие ссылки. Команда cp обрабатывает каждое имя файла как отдельный файл, даже если это жесткая ссылка на другой файл, уже скопированный. Напротив, архиваторы распознают общность и сохраняют жесткие ссылки, уменьшая объем передаваемых данных. Еще одно преимущество архиваторов заключается в том, что вы можете перемещать файлы между компьютерами.

Вам нужно проверить, что копия tar вашей машины способна делать то, что вам нужно, но с помощью GNU tar (и 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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .