我的目标是遍历整个文件系统并获取绝对路径,文件所有者和文件组,并将它们存储在一个文件中,以便以后使用脚本重新应用“已知”文件的所有权。
注意:需要安装'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 ','
我错过了什么?
答案 0 :(得分:2)
您在fileog.sh
中运行find
,只给他一个参数(文件名{}
):
-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
答案 1 :(得分:0)
您不应该同时使用find
和getfacl -R
,或者您应该更仔细地使用它们。
find
已经递归,所以你以这种方式多次点击每个文件。
我会这样解决问题:
find / -exec stat -c '%n,%U,%G' {} \; >> ./ogindex.txt
如果你需要引导/
被剥离,这将是一小部分后期处理。
注意:假设stat
支持通过-c
进行格式化;并非stat
的所有版本都相同。
此外,我强烈建议您不要以此格式存储此信息。如果文件名中包含逗号会怎样?如果您使用user,group,filename
它会更安全,因为您可以将第二个逗号之后的所有内容视为文件名。当然,这仍然容易受制于文件名。