如何复制文件并赋予它们目的地目录的权限

我正在从源文件复制到位置。 源不是我所有的,源文件的权限是—- rwx —。 对我所拥有的目的地目录的文件的许可是—- rx —。 目标目录的权限是drwxrwsrwx。 如何获得具有相同目标目录权限的文件? 我试过“cp –no-preserve = all”,但它没有工作(仍然是相同的权限)。

尝试这个:

cp --no-preserve=mode,ownership $backupfile $destination 

让我把它改为“如何保留复制目标目录的权限?
因为我只是结合了我在野外找到的几个答案,所以我不能赞扬这个答案。 所以它来了。

首先

权限通常不会被复制到文件的目录传播,而是由用户的umask控制新的权限 。 但是,当您将文件从一个位置复制到另一个位置时,会有一些特殊情况,用户的umask基本上被忽略,并且保留了文件上的现有权限。

这就解释了为什么你不能直接src的权限传播到dst目录。

但是,这有两步解决方法。

  1. cp-metadata :将属性和只有要保留的属性复制回源目录。 这是一个快速的脚本,可以做到这一点:
 #!/bin/bash # Filename: cp-metadata myecho=echo src_path="$1" dst_path="$2" find "$src_path" | while read src_file; do dst_file="$dst_path${src_file#$src_path}" $myecho chmod --reference="$src_file" "$dst_file" $myecho chown --reference="$src_file" "$dst_file" $myecho touch --reference="$src_file" "$dst_file" done 

如果您不想保留时间戳,您可以省略touch命令。 将myecho=echo替换为myecho=来实际执行命令。
请注意,这个脚本应该以sudo模式运行,以便能够有效地运行chownchmod

  1. cp --preserve :现在成功运行第一个命令之后,就可以将内容和属性一起复制到dst目录。

    –preserve [= ATTR_LIST]
    保留指定的属性(默认:模式,所有权,时间戳),如果可能的话附加属性:context,links,xattr,all

    \cp -rfp $src_dir $dst_dir应该做你想做的。