如何复制文件并赋予目标目录权限

问题描述 投票:0回答:2

我正在将文件从源复制到位置。来源不属于我所有,来源文件的权限是

----rwx---

复制到我拥有的目标目录的文件的权限是

----r-x---
。目标目录的权限是
drwxrwsrwx

如何让文件与目标目录具有相同的权限。

我尝试了

cp --no-preserve=all
但它不起作用(仍然是相同的权限)。

linux deployment permissions cp
2个回答
13
投票

试试这个:

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

6
投票

让我将其改写为“如何在副本上保留目标目录的权限?”
我不能相信这个答案,因为我只是结合了我在野外找到的几个答案。所以它来了。

首先

权限通常不会由文件复制到的目录传播,而是 新权限由用户的 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
模式下运行,以便能够 有效运行
chown
chmod

  1. cp --preserve
    :成功运行第一个命令后 现在是时候将内容和属性复制到 dst 了 目录。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.