Nas*_*din 9 linux deployment permissions cp
我正在将文件从源复制到位置.源不属于我,源文件的权限是---- rwx ---.处理我所拥有的目标目录的文件的权限是---- rx ---.目标目录的权限是drwxrwsrwx.如何使用目标目录具有相同权限的文件.我试过"cp --no-preserve = all"但它没有用(仍然是相同的权限).
Gio*_*ano 13
试试这个:
cp --no-preserve=mode,ownership $backupfile $destination
Run Code Online (Sandbox Code Playgroud)
让我将其改写为“如何保留副本上目标目录的权限?”
我不能相信这个答案,因为我只是结合了我在野外找到的几个答案。所以它来了。
权限通常不会由文件复制到的目录传播,而是由用户的 umask 控制新权限。但是,当您将文件从一个位置复制到另一个位置时,这是一种特殊情况,用户的 umask 基本上被忽略,并且文件的现有权限被保留。
这就解释了为什么你不能直接将src的权限传播到dst目录。
但是,有两个步骤可以解决此问题。
#!/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
Run Code Online (Sandbox Code Playgroud)
touch
如果您不想保留时间戳,可以省略该命令。替换myecho=echo
为myecho=
实际执行命令。
请注意,此脚本应该在sudo
模式下运行,以便能够有效地chown
运行chmod
cp --preserve
:成功运行第一个命令后,现在可以将内容和属性复制到 dst 目录。
--preserve[=ATTR_LIST]
保留指定的属性(默认:模式、所有权、时间戳),如果可能的话附加属性:上下文、链接、xattr、全部
\cp -rfp $src_dir $dst_dir
应该做你想做的事。