因此,我要备份主文件夹,方法是将其复制到外部驱动器,如下所示:

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


结果是,现在已拥有外部驱动器上的所有文件夹通过root:root。如何让cp保留原始文件的所有权和权限?

评论

是的,很高兴他问,因为google仍然比'man'快:-)。

我很高兴他也问了

@StijnGeukens连Google都不是更快,这甚至连我的人也很神秘。在这种情况下,-r处的人表示与--preserve = mode,所有权,时间戳相同。我应该怎么知道这意味着要保留原始权限!?

@KolobCanyon您的意思是-p

在文件和目录的上下文中,模式表示权限。如在chmod中;这意味着更改模式。命名!要爱它。

#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


评论


使用cp -a更好。这还包括-recursive标志,但它的作用还不止于此-它保留了有关文件的所有内容; SELinux属性,链接,xattr等所有内容。这是“存档模式”。有更好的备份工具,但是如果使用cp进行备份,请不要使用cp -a以外的任何东西。

–通配符
2015年10月14日,下午3:54

可以,但是耐心在这里很好。该命令仅在完成时才正确设置所有内容:当它仍在复制目录时,并且您以root用户身份运行cp时,该目录将归root用户所有。仅在此目录结束时,它将设置为正确的权限。

– Paul
15年11月18日在17:01

cp -a在某些系统上不起作用: OS X,其中(至少在某些版本中)需要使用cp -pR。在我当前的OS X系统上(10.10.15),cp -a似乎很受人尊敬。

– dubiousjim
17年9月30日在16:30

如果我使用cp -a复制文件夹结构,则使用diff <(getfacl -R folder1)<(getfacl -R folder2)我似乎仍然会获得不同的访问控制列表:(

– philx_x
19年5月29日在18:20

@EugeneKaurov -r是递归的。没有它,您将无法复制目录。

– Henno
19年9月12日在6:08

#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.


有关此问题,请参见此问题cprsync之间的比较:https://stackoverflow.com/q/6339287/406686

请注意斜杠(有关详细信息,请参见手册页)。

评论


+ 1,cp -p很好,但是我总体上更喜欢rsync的输出,因此我将pcp别名为时间rsync --progress -ah。在我心中代表“进度复制”。两者都接受-r,因此对于一般的终端使用来说效果很好-但不幸的是,不能与sudo结合使用,如本问题/答案所示。

–伊兹卡塔
2012年7月20日在17:59



注意:rsync -a,不保留扩展属性(-X),也没有ACL(-A)-简短描述为存档模式;等于-rlptgoD(无-H,-A,-X)。例如。没有-X,将不会保留SELinux上下文。在许多情况下,这很好,但是如果您对系统分区进行备份,则丢失-X可能会造成很大的损失。据我所知,cp -a实际上保留了所有文件属性。

–英仙座
2014年9月23日下午6:44

刚刚进行了测试,而sudo cp -a保留了所有权和组,而sudo rsync -a将其更改为root。因此,@ Perseids是正确的。

–约翰·汉密尔顿
18 Mar 16 '18在11:59

@JohnHamilton在Mint上,这非常好用……它只会在以后更改所有权和组(我不知道何时)。我刚刚使用rsync -aX / home / mnt / sdd /复制了整个/ home文件夹,它的工作原理就像一个魅力。

–奥利维尔·庞斯(Olivier Pons)
18-10-18在7:04

@JohnHamilton根本不是Perseides所说的。

–user643011
19年8月24日在15:30

#3 楼

cp -a


-a--archive的缩写-基本上,它完全复制目录;文件保留其所有属性,并且符号链接未取消引用(-d)。

来自man cp

评论


哪个不保留ᴀᴄʟ。

–user2284570
5月17日13:19

#4 楼

我使用cp -pdRx,它将保留模式,所有权和时间戳记,-p保留链接(以便您获得符号链接,而不是复制文件内容),-d递归执行,-R保留在一个文件系统上(仅当您复制-x或具有活动挂载点的对象)。

PS:/而不是-R只是使用-r的习惯。

评论


cp -ax是同一件事的简短版本。效果很好-谢谢!

–EM0
2015年3月25日12:27



实际上,-r和-R之间有区别。检查手册页(即使特定部分也太长而无法在此处引用)。

– geckon
15年7月8日在13:23

我认为没有(尽管曾经有过并且可能仍然在某些版本的Unix上)。参见man7.org/linux/man-pages/man1/cp.1.html它只是简单地说-R,-r,-recursive复制目录。

– StarNamer
2015年7月8日在16:09



#5 楼

cp可以选择保留文件所有权。从cp的手册页中:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.


#6 楼

您可以这样做:您运行更改目录的“子外壳”(带括号的命令),然后获取tar来反转转换。一堆字节变成具有正确所有权和权限的目录和文件。

评论


其他答案表明,使用tar和使用cp -rp之间有区别吗?

–lucidbrot
4月1日15:18

@lucidbrot-我认为tar和cp -rp仅在特殊情况下会有所不同-它们如何处理符号链接或其他特殊文件,如何处理某些文件系统的扩展属性或处理稀疏文件。

–布鲁斯·埃迪格(Bruce Ediger)
4月2日13:40

#7 楼

答案很简单:cp具有保留权限的-p选项(这是一条鱼)。学习如何钓鱼?)。

#8 楼

您可以使用preserve = all,然后您的副本将保留所有属性,例如文件的所有者,组和时间戳。
因此,请使用以下命令安全地进行备份。

cp -r --preserve=all /home/my_home /media/backup/my_home


#9 楼

答案是

 cp -rp /source/ /dest
 


评论


这个答案似乎与已接受的答案完全一样(保存for sudo调用,但是OP似乎是必需的...)

– AdminBee
6月2日9:46



另外,除非您是root用户,否则在复制时不能保留所有权。否则,在具有按用户磁盘配额的系统上,它将作为本地拒绝服务攻击的一种形式,允许用户通过复制其文件来填充其他用户的磁盘配额。

–telcoM
6月3日6:41

#10 楼

我使用Linux Zorin很好,而我的问题是试图在我的计算机在iso(可启动USB驱动器)上启动时将主文件夹复制到外部驱动器,因为ive弄乱了我的sdd,现在它无法正常启动,所以我正在做一个新的安装,这次我希望成功安装Windows 7,然后再安装zorin OZ或仅安装Zorin OS,我不确定是否应该使用虚拟机双重引导或使用Linux。
我做了什么:
安装caja(通过命令行或软件商店)
以root身份运行caja(我使用命令行并以ROOT身份运行)
复制并粘贴我想要的文件,跳过了不想复制的内容,希望我别在意)
完成。
对我来说,我的20g家用文件夹将永远占用空间,几分钟后感觉就像是永恒。
希望对我所有的人都可以帮助在这里闲逛。