复制文件权限200

复制文件权限200

我想递归复制一个目录,保留文件属性,其中包含一个目录树,其中包括一些权限为 200 (即--w-------)的文件。

复制命令cp -ar sourcedirectory targetdirectory会跳过这些文件,对于每个文件,如下所示:

cp: cannot open `sourcedirectory/foo/somefile.bar' for reading: Permission denied`

我的问题:在不更改权限的情况下,如何防止复制命令跳过这些文件?

如果您认为我应该使用cp复制命令以外的实用程序,请解释原因。

答案1

您必须使文件可读才能复制它。这与工具的选择无关:每个程序都将无法打开该文件进行读取,因为您没有读取该文件的权限。

如果ACL已启用(对于 ext2/ext3/ext4,这需要 mount 选项acl)并且您对复制它们不感兴趣,请添加一个 ACL,允许执行复制的用户读取文件。

setfacl -R -m u:username:rX sourcedirectory

否则,您必须事先更改文件权限并随后恢复它们(双方),或者以 root 身份进行复制。

答案2

这一页提供了多种复制数据的方法,保留尽可能多的元数据。你可以尝试每一个,作为根用户:

  • cp -av /source /dest# 不要使用-r,它的行为很难预测并且-a已经包含-R
  • cd /source; tar -cf- . | tar -xvpf- -C /dest
  • cd /source; find . -depth -print0 | cpio -pdmv -0 /dest
  • rsync -av --delete --hard-links /source/ /dest

/Rsync 对于参数中的尾随 s 有点棘手。正如其手册页中所解释的,这两种方法都是将目录复制/source/foo/dest/foo

  • rsync ... /source/foo /dest
  • rsync ... /source/foo/ /dest/foo

这些可能都不起作用。确保在尝试它们的同时寻找最好的前景。

答案3

据我所知,我们可以按照以下步骤保持权限不变并复制所有文件。

$ cd <sourcedirectory>

$ tar -cvf <sourcedirectory.tar> .

$ cp <sourcedirectory.tar> <destinationdirectory>

$ tar -xvf <sourcedirectory.tar>

相关内容