我使用的是linux系统,需要在一组嵌套文件和目录上尝试一些权限。我想知道是否有一些方法可以保存文件和目录的权限,而不保存文件本身。
换句话说,我想保存perm,编辑一些文件,调整一些权限,然后将权限恢复到目录结构中,保持更改后的文件不变。
这有意义吗?
发布于 2010-08-10 23:10:38
嗯。因此,您需要1)读取文件权限2)以某种方式存储它们,并与每个文件相关联3)读取您存储的权限并将其重新设置
不是一个完整的解决方案,而是一些想法:
stat -c%a filename
>644很可能是与
find -exec为了存储这些信息,this so question有一些有趣的想法。基本上,您可以创建一个与实际文件相匹配的临时文件结构,每个临时文件都包含文件权限
为了重置,你迭代你的临时文件,读权限和chmod实际文件回来。
发布于 2010-08-10 23:26:05
最简单的方法是使用ACL工具,即使您实际上并不使用ACL。只需调用getfacl -R . >saved-permissions来备份目录树的权限,并调用setfacl --restore=saved-permissions来恢复它们。
否则,备份权限的方法是使用find -printf。(GNU find是必需的,但这是您在Linux上所拥有的。)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions您将获得一个包含以空字符分隔的记录的文件;每个记录都包含一个文件的数字权限、用户名、组名和文件名。要恢复,循环遍历记录并调用chmod和chown。find的-depth选项是为了防止您想要使某些目录不可写(您必须首先处理它们的内容)。
您可以使用从Daniel Alder提供的代码段派生的bash代码段来恢复权限
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions您可以使用以下awk脚本将find输出转换为一些shell代码,以恢复权限。
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh发布于 2013-04-21 07:20:27
首先安装ACL包:
sudo apt-get install acl递归地存储文件的权限和所有权:
getfacl -R yourDirectory > permissions.acl恢复(相对于当前路径):
setfacl --restore=permissions.aclhttps://stackoverflow.com/questions/3450250
复制相似问题