我在这里的目标是遍历整个文件系统,获取绝对路径、文件所有者和文件组,并将它们存储在一个文件中,以便稍后通过脚本重新应用“已知”文件的所有权。
注意:需要安装'acl‘包。
这是我到目前为止所知道的:
find / -exec ./fileog.sh {} \;
./fileog.sh的内容:
getfacl -R "$2" | awk 'NR==1, NR==3 {print $3}' | paste -s -d ',' >> ./ogindex.txt
问题是,我得到以下错误:
getfacl: : No such file or directory
但如果我这样做,它就会起作用:
find / -exec getfacl -R "$2" {} \;
自己尝试一下:)
getfacl -R ./some.file | awk 'NR==1, NR==3 {print $3}' | paste -s -d ','
我遗漏了什么?
发布于 2012-07-25 00:42:05
您不应该同时使用find
和getfacl -R
,或者应该更加谨慎地使用它们。
find
已经递归了,所以你会以这种方式多次访问每个文件。
我会这样解决这个问题:
find / -exec stat -c '%n,%U,%G' {} \; >> ./ogindex.txt
如果您需要剥离前导/
,这将是一个很小的后处理。
注意:假设stat
支持通过-c
进行格式化;并不是所有版本的stat
都是相同的。
另外,我强烈建议您不要以这种格式存储此信息。如果文件名中包含逗号,会发生什么情况?如果你使用user,group,filename
,它会更安全,因为你可以把第二个逗号之后的所有东西都当作文件名。当然,这仍然容易受到精心编制的文件名的攻击。
发布于 2012-07-25 00:17:53
在find
中运行fileog.sh
,只给他一个参数(filename,{}
):
-exec ./fileog.sh {} \;
可以在脚本中以$1
而不是$2
的身份访问此文件名。
您必须在脚本中编写$1
而不是$2
,或者必须将缺少的参数添加到-exec
中的te脚本。
ogeindex.txt
片段
etc,root,root
etc/ucf.conf,root,root
etc/gshadow,root,shadow
etc/sudoers.d,root,root
etc/sudoers.d/README,root,root
etc/motd.tail,root,root
https://stackoverflow.com/questions/11634980
复制相似问题