【问题标题】:How to copy files and give them permission of destination directory如何复制文件并授予它们目标目录的权限
【发布时间】:2016-03-23 10:37:56
【问题描述】:

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

【问题讨论】:

    标签: linux deployment permissions cp


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 设置目标目录对新复制文件的权限。相反,它设置完成复制操作的用户的权限。例如,如果您在root下复制,则复制的文件权限将为root:root
    【解决方案2】:

    让我将其改写为“如何在复制时保留目标目录的权限?”
    我不能把答案归功于我,因为我只是结合了我在野外找到的几个答案。所以它来了。

    Firstly

    权限通常不会由文件复制到的目录传播,而是新权限由用户的 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 目录。

      --保留[=ATTR_LIST]
      保留指定的属性(默认:模式、所有权、时间戳),如果可能的话,附加属性:上下文、链接、xattr、所有

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多