我正在将文件从源位置复制到目标位置。源位置不是我的拥有者,文件的权限为----rwx---。被复制到由我拥有的目录中的文件权限为----r-x---。目标目录的权限为drwxrwsrwx。如何让复制后的文件与目标目录具有相同的权限?我尝试了“cp --no-preserve=all”,但它没有起作用(权限仍然相同)。
我正在将文件从源位置复制到目标位置。源位置不是我的拥有者,文件的权限为----rwx---。被复制到由我拥有的目录中的文件权限为----r-x---。目标目录的权限为drwxrwsrwx。如何让复制后的文件与目标目录具有相同的权限?我尝试了“cp --no-preserve=all”,但它没有起作用(权限仍然相同)。
试试这个:
cp --no-preserve=mode,ownership $backupfile $destination
让我重新表达一下:"如何在复制时保留目标目录的权限?"
我不能为答案负责,因为我只是结合了几个我在网络上找到的答案。所以接下来就是答案。
通常情况下,文件被复制到的目录不会传播其权限,而是新权限由用户的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
touch
命令。
将myecho=echo
替换为myecho=
以执行命令。sudo
模式下运行,以便能够有效地运行chown
和chmod
。
cp --preserve
: 成功运行第一个命令后,
现在是时候将内容与属性一起复制到dst目录中了。
--preserve[=ATTR_LIST]
保留指定的属性(默认值:模式、所有者、时间戳),如果可能还有其他属性:上下文、链接、xattr、全部
\cp -rfp $src_dir $dst_dir
应该做你想要的事情。