如何复制文件夹以保持所有者和权限不变?

如何复制文件夹以保持所有者和权限不变?

因此,我打算通过将主文件夹复制到外部驱动器来备份它,如下所示:

sudo cp -r /home/my_home /media/backup/my_home

结果是外部驱动器上的所有文件夹现在都归root:root.如何才能cp保留原来的所有权和权限?

答案1

sudo cp -rp /home/my_home /media/backup/my_home

来自 cp 联机帮助页:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all

答案2

您也可以使用rsync.

sudo rsync -a /home/my_home/ /media/backup/my_home/

rsync联机帮助页:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

cp请参阅此问题以了解和之间的比较rsynchttps://stackoverflow.com/q/6339287/406686

请注意尾部斜杠(有关详细信息,请参阅联机帮助页)。

答案3

cp -a

Where-a的缩写--archive— 基本上它按原样复制目录;文件保留其所有属性,并且符号链接不会取消引用 ( -d)。

man cp

   -a, --archive
          same as -dR --preserve=all

答案4

你可以这样做:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tar保持权限、所有权和目录结构完整,但将所有内容转换为字节流。您运行一个更改目录的“子shell”(括号内的命令),然后tar反转转换。一串字节成为具有正确所有权和权限的目录和文件。

相关内容