如何按路径索引所有者/组并稍后应用它们?

时间:2012-07-24 16:10:24

标签: bash find paste

我的目标是遍历整个文件系统并获取绝对路径,文件所有者和文件组,并将它们存储在一个文件中,以便以后使用脚本重新应用“已知”文件的所有权。

注意:需要安装'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 ','

我错过了什么?

2 个答案:

答案 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)

您不应该同时使用findgetfacl -R,或者您应该更仔细地使用它们。

find已经递归,所以你以这种方式多次点击每个文件。

我会这样解决问题:

find / -exec stat -c '%n,%U,%G' {} \; >> ./ogindex.txt

如果你需要引导/被剥离,这将是一小部分后期处理。

注意:假设stat支持通过-c进行格式化;并非stat的所有版本都相同。

此外,我强烈建议您不要以此格式存储此信息。如果文件名中包含逗号会怎样?如果您使用user,group,filename它会更安全,因为您可以将第二个逗号之后的所有内容视为文件名。当然,这仍然容易受制于文件名。