【问题标题】:Python 3 - How to chmod all files in a given directory?Python 3 - 如何对给定目录中的所有文件进行 chmod?
【发布时间】:2021-03-21 01:54:41
【问题描述】:

在 python 3 脚本中,我尝试为目录中的所有 .sh 文件添加执行权限,如下所示:

from os import chmod
chmod('/path_to_dir/dir_prefix_*/bin/*.sh',0o755)

但我收到一个错误:

FileNotFoundError: [Errno 2] No such file or directory:'/path_to_dir/dir_prefix_*/bin/*.sh'

如果我从 bash 运行这个 chmod,它可以正常工作,所以我猜 python 的 chmod 不喜欢在路径中使用 *

那么,chmod 目录中所有 .sh 文件的正确方法是什么?

【问题讨论】:

  • Pythond 不能使用 * 来获取所有文件 - 你必须使用循环来获取前缀为 dir_prefix_ 的所有文件夹,然后使用另一个循环来获取所有扩展名为 .sh 的文件在文件夹中。最终你应该首先使用glob.glob(),它可以使用*

标签: python python-3.x chmod


【解决方案1】:

只需使用 for 循环。

import os
for file in os.listdir("/mydir"):
    if file.endswith(".sh"):
        chmod(file, mode)

【讨论】:

  • 我认为应该是 chmod(os.path.join('/mydir',file)),mode)
  • 谢谢。请注意,路径中还有另一个*,因为有多个具有相同前缀的目录,并且在其中有包含 .sh 文件的 bin 目录。我想我必须再做一个循环?没有办法像普通的 chmod 那样做单行吗?
  • 您可以使用 os.system() 命令在 python 中执行 shell 命令。也许是这样,不太确定最好的 chmod 命令:os.system("chmod -R 755 /path/to/directory")
  • 而不是os.listdir(..),您可以尝试使用glob.glob('/path_to_dir/dir_prefix_*/bin/*.sh') 获取所有文件,然后使用for-loop 和chmod
  • 谢谢大家!我想从 Python 本身来做,但我想调用一个进程并做一个单行代码会更省力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多