python中有chgrp -R的等价物吗?

2vuwiymt  于 7个月前  发布在  Python
关注(0)|答案(3)|浏览(64)

我想递归地改变一个目录的组名,我使用os.chown()来做这件事。但是我在os.chown()中找不到任何像(chgrp -R)这样的递归标志。

waxmsbnn

waxmsbnn1#

你为什么不直接把命令传给shell呢?

os.system("chgrp -R ...")

字符串

anhgbhbe

anhgbhbe2#

我写了一个函数来执行chgrp -R

def chgrp(LOCATION,OWNER,recursive=False):

  import os 
  import grp

  gid = grp.getgrnam(OWNER).gr_gid
  if recursive:
      if os.path.isdir(LOCATION):
        os.chown(LOCATION,-1,gid)
        for curDir,subDirs,subFiles in os.walk(LOCATION):
          for file in subFiles:
            absPath = os.path.join(curDir,file)
            os.chown(absPath,-1,gid)
          for subDir in subDirs:
            absPath = os.path.join(curDir,subDir)
            os.chown(absPath,-1,gid)
      else:
       os.chown(LOCATION,-1,gid)
  else:
    os.chown(LOCATION,-1,gid)

字符串

nhhxz33t

nhhxz33t3#

采用@fuji-komalan的解决方案,并做一些不同的事情:

import os.
import shutil
from itertools import chain

def chgrp(path, group, recursive=False):
    def prepend_dirpath(dirpath):
        def f(fn):
            return os.path.join(dirpath, fn)
        return f
    shutil.chown(path, -1, group)
    if recursive:
        for dirpath, dirnames, filenames in os.walk(path):
            for f in map(prepend_dirpath(dirpath), chain(dirnames, filenames)):
                shutil.chown(f, -1, group)

字符串
通过使用shutil.chown,您不需要显式地查找组的gid(尽管只执行一次可能会有轻微的性能优势)。

相关问题