0

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

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

我错过了什么?

4

2 回答 2

2

你跑fileog.sh进去find,只给他一个参数(文件名,{}):

-exec ./fileog.sh {} \;

此文件名将在脚本中以$1. 而非. 的形式访问$2

您必须写$1而不是$2在脚本中,或者您必须将缺少的参数添加到 te 脚本中-exec

的片段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
于 2012-07-24T16:17:53.410 回答
0

你不应该同时使用findand getfacl -R,或者你应该更小心地使用它们。

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

我会这样解决问题:

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

如果您需要/剥离前导,这将是一点点后期处理。

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

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

于 2012-07-24T16:42:04.633 回答