更改python中文件的权限

时间:2019-05-24 15:45:07

标签: python unix

我正在尝试执行以下操作:

编写代码,检查目录“文件”中每个文件的权限。 如果“组”的权限不是“ rwx”,请更改该文件的权限 如下: “用户”可以rwx, 'group'可以rwx, “其他”无能为力。

我尝试了以下方法:

import os
import stat

path = '/home/myname/files'
for r, d, f in os.walk(path):
  for file in f:
    if not os.access(file, stat.S_IRWXU):
      print("User cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXU)
    if os.access(file, stat.S_IRWXG) == 0:
      print("Group cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXG)

但是,我注意到两件事。

  1. 无论我尝试什么,都无法检查它是否不是rwx。它会忽略“如果不是”,并且“ == 0”也将不起作用。
  2. 调用S_IRWXU会像我希望的那样更改权限,但是稍后我调用“ S_IRWXG”时,用户权限会消失。这不是我想要的。 我该如何解决这两件事?

1 个答案:

答案 0 :(得分:0)

这是我认为您应该修改代码的方式:

def isGroupRWX(file):
    # check the group bits of the file mode are all set (R, W and X)
    mode = os.stat(file).st_mode
    return (mode and 0b111000) == 0b111000

def fixPermissions(file):
    # set permissions for both user and group to RWX
    os.chmod(file, stat.S_IRWXG or stat.S_IRWXU)

您需要检查os.stat来获取文件的模式,因为您需要显式检查组权限,而不仅仅是当前用户是否可以访问文件。

您可以将模式组合传递给os.chmod以便同时设置所有模式,这可以解决您的第二个问题。