use*_*394 140 shell permissions files chown
是否有命令或标志可以从另一个文件克隆文件的用户/组所有权和权限?使权限和所有权与另一个文件完全相同?
enz*_*tib 199
在GNU / Linuxchown和chmod有一个--reference选项
chown --reference=otherfile thisfile
chmod --reference=otherfile thisfile
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 13
在任何带有 GNU 实用程序的 unix 上,例如(非嵌入式)Linux 或 Cygwin,您都可以使用chmod --reference和chown --reference。
如果您的系统有ACL,请尝试使用 ACL 命令getfacl和setfacl。这些命令因系统而异,但在许多系统中您可以getfacl other_file | setfacl -bnM - file_to_change用来复制权限。这不会复制所有权;您可以通过仔细解析 来做到这一点ls -l other_file,假设您没有包含空格的用户名或组名。
LC_ALL=C ls -l other_file | {
read -r permissions links user group stuff;
chown -- "$user:$group" file_to_change
}
getfacl other_file | setfacl -bnM - file_to_change
Run Code Online (Sandbox Code Playgroud)
如果您没有使用带有 GNU 的 chmod/chown(支持该--reference选项)的系统,您可以尝试解析ls -l
这里有一个小脚本chmod(如果你知道哪些支持扩展的正则表达式,它们可以用更易读的方式编写......)
#!/bin/sh
reference=$1
shift
files=$*
# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )
chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}
Run Code Online (Sandbox Code Playgroud)
更新:
这更容易使用stat:
chmod $( stat -f '%p' ${reference} ) ${files}
Run Code Online (Sandbox Code Playgroud)