【问题标题】:Python - list files that belong to specific 'group'Python - 列出属于特定“组”的文件
【发布时间】:2015-09-15 19:31:49
【问题描述】:

在 python 中,我可以使用os.listdir('dir') 轻松列出目录中的文件,但我如何轻松地将这些文件过滤到属于特定组的文件?这只是在 unix 中使用find . -group "foo"

完成的

例如,假设我有以下三个文件:

-rwxrwxrwx 1 foo foo 0 Sep 15 08:57 foo.txt
-rwxrwxrwx 1 bar bar 0 Sep 15 08:34 bar.txt
-rwxrwxrwx 1 foo foo 0 Sep 15 08:57 faz.txt

如何使用 python 仅获取属于“组”foo 的那些文件?

返回的文件应该是foo.txtfaz.txt,最好是在list 对象中。

similar question 说明了在您知道文件后如何获取组/用户。我想将列表过滤到特定的组。

【问题讨论】:

标签: python


【解决方案1】:

这可能有效:

import os
import grp
gid = grp.getgrnam('foo').gr_gid

file_list = []
for fle in os.listdir('dir'):
    if os.stat(fle).st_gid == gid:
        file_list.append(fle)

或作为单行(列表理解):

file_list = [fle for fle in os.listdir('dir') if os.stat(fle).st_gid == gid]

【讨论】:

  • 这几乎让我到达了那里,但我需要将最后一个 gid 更改为 gid.gr_gid 以使其匹配。
【解决方案2】:

grp modulePython's list comprehensions 可以为您提供帮助,它们对于简洁地过滤数组非常方便。

[f for f in os.listdir("dir") if grp.getgrgid(os.stat(f).st_gid).gr_name == "foo"]

如果您只满足于组 id,则可以完全避免 grp

[f for f in os.listdir("dir") if os.stat(f).st_gid == 1234] 

(当然,将1234 替换为实际的组ID)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多