Как копировать файлы и каталоги, сохраняя права доступа к файлам в UNIX

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

Благодарю.

1 ответ

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

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

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

Другие вопросы по тегам