首页 > 解决方案 > python 如果目录中的文件都共享相同的权限,则运行正则表达式

问题描述

如何递归测试每个目录以及特定目录中的所有文件是否共享相同的 uid、gid、模式、功能、selabel。如果他们这样做,请运行命令。

file1.txt 的示例内容:

set_metadata("/system/system/vendor/app/mcRegistry/00060308060501020000000000000000.tlbin", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "u:object_r:mobicore_file:s0");
set_metadata("/system/system/vendor/app/mcRegistry/ffffffffd00000000000000000000062.tlbin", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "u:object_r:mobicore_file:s0");
set_metadata("/system/system/vendor/app/mcRegistry", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mobicore_file:s0");

想要的输出:

set_metadata("/system/system/vendor/app/mcRegistry", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:mobicore_file:s0");

所以基本上如果所有共享通用uid,gid,模式,重写完整目录,将其模式重命名为dmode,保存所有文件通用模式将其添加为fmode

我也在使用https://github.com/cubinator/ext4/blob/master/ext4.py35.py库来检查所有这些。

我该怎么做。这对我来说太难了。我设法重命名"mode" to "dmode"re.sub仅此而已。

编辑:假设您可以获取文件的 uid,{uid}对于 gid 等也是如此。

EDIT2:我找到目录

import glob

files = glob.glob("system" + '/**/*', recursive=True)

标签: pythonpython-3.x

解决方案


检查某个集合中的所有项目是否在一组属性上共享相同值的一种常见且简单的方法是将这些属性(UID、GID 等)tuple收集到集合中的每个项目的 a 中,并将该元组插入一个set。完成对所有项目的迭代后,检查集合的大小是否恰好为 1。如果是,则意味着所有项目在观察到的属性上具有相同的值。


推荐阅读