我们如何使用os.chmod删除所有人的特定权限?
简而言之,我们如何使用os.chmod
编写以下内容chmod a-x filename
我知道我们可以添加现有权限并删除。
In [1]: import os, stat
In [5]: os.chmod(file, os.stat(file).st_mode | stat.S_IRGRP) # Make file group readable.
但我无法弄清楚所有的操作
答案 0 :(得分:9)
冷却。所以秘诀是你首先需要获得当前的权限。这有点乱,但它确实有效。
current = stat.S_IMODE(os.lstat("x").st_mode)
我们的想法是lstat.st_mode
为您提供了标记,但您需要将其裁剪到chmod
接受的范围内:
help(stat.S_IMODE)
#>>> Help on built-in function S_IMODE in module _stat:
#>>>
#>>> S_IMODE(...)
#>>> Return the portion of the file's mode that can be set by os.chmod().
#>>>
然后,您可以通过一些位操作删除stat.S_IEXEC
标志,这将为您提供要使用的新号码:
os.chmod("x", current & ~stat.S_IEXEC)
如果您不熟悉bit twiddling,&
只接受这两个数字所具有的位,~
将数字的位反转。因此,x & ~y
会获取x
所拥有且y
所拥有的那些位。
答案 1 :(得分:0)
如果你想使用os.chmod(),你可以使用下面的代码:
import os
for dir_path, dir_names, files in os.walk('.'):
for file in files:
abs_path = os.path.join(dirpath, file)
os.chmod(abs_path, 0o755)