如何复制文件并授予他们目标目录

时间:2015-12-17 04:11:09

标签: linux deployment permissions cp

我正在将文件从源位置复制到位置。源不属于我,源文件的权限是---- rwx ---。处理我所拥有的目标目录的文件的权限是---- r-x ---。目标目录的权限是drwxrwsrwx。如何使用目标目录具有相同权限的文件。我尝试了“cp --no-preserve = all”但它没有用(仍然是相同的权限)。

2 个答案:

答案 0 :(得分:13)

试试这个:

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

答案 1 :(得分:1)

让我改为“如何在副本上保留目标目录的权限?”
我不能赞同答案,因为我只是结合了我在野外发现的几个答案。所以它来了。

Firstly

  

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

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

但是,有两步解决方法。

  1. cp-metadata:将属性和仅要保留的属性复制回源目录。这是一个可以执行此操作的快速脚本:
  2. #!/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了 。目录

        

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

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