我正在尝试复制SRC
包含一些文件和子文件夹的文件夹 ( )。
内容及其SRC
本身已启用 setgid 位(即组三元组中s
的 的位置)。x
此外,整个内容的组是srcgrp
同时文件具有不同的所有者(假设me
,she
和they
)。
现在,我想将所有文件夹(SRC
包括)复制到另一个文件夹(假设/mnt/d/SRC
是/home/dog/data/SRC
)。
问题如下:当我提示cp -Rp /mnt/d/SRC /home/dog/data/SRC
文件夹正在被复制时/home/dog/data/SRC
,但所有内容的所有者都变成了me
,即使我chmod g-s /home/dog/data
之前给出了。
我想保留源文件的所有者。我怎样才能得到它?
谢谢。
您必须以 root 身份运行复制命令,否则所有者将重置为您,并且组可能会被重置。
完整规则按顺序考虑:
使用 时遵守这些规则
rsync
。然而,使用 (GNU)cp
会施加进一步的限制,即如果无法保留所有者或组,则删除 setuid/setgid 位。src
示例使用 from to 的副本dst
,然后sdiff
列出两个目录之间的差异。每次尝试的初始状态:
使用(GNU)
cp
使用
rsync
:请注意,where
rsync
维护了该组,这是因为运行该命令的非 root 用户是该组的成员。否则该组将被重置为用户的主要组。我相信rsync是您应该用于该操作的工具,因为它保留所有者、权限等......类似:
应该解决这个问题,首先检查该
--dry-run
选项是否符合您的要求。由于您显然会将文件从一个文件系统传输到另一个文件系统(/mnt 到 /home),因此如果您在要复制的文件之间获得符号链接或硬链接,您可能需要在手册中阅读更多内容,您可以准确地使用它们做什么,谢谢l、L、k、K 和 H 选项。
此外,从您的评论中注意到您无法成为 root,请考虑以下
--fake-super
选项:每当我需要复制文件夹及其所有[未知]内容时,或者当我知道它有一些我想要保留的奇特文件/文件夹权限时,请使用tar。
缺点是与一个cp或rsync相比需要几个步骤,但优点是当您有一个包含大量文件的文件夹时,则可以以最大速度通过网络复制一个 tar 文件,而在复制时似乎要花很长时间处理数千个子文件和文件夹。tar 存档及其后续提取将保留该系统上源位置处的文件夹的所有内容。
如果您需要将某些内容从 Linux 文件系统(例如 XFS 或 EXT4)复制到 NTFS 磁盘,而 NTFS 文件系统根本不支持 Linux 中的许多内容,则此功能非常有用。但是,如果它包含在存档文件(例如 .tar)中,那么它会全部保留在其中,因此只要您拥有该 .tar 文件,就不会丢失它。