忽略了“Permission denied”错误。不幸的是,我需要知道是否有一个我无法阅读的目录。
我可以使用os.walk()和fnmatch,但也许有更好的解决方案?
示例:
user@pc:~
===> python
>>> import glob
>>> glob.glob('/root/*')
[]
/ root中有文件,但不允许用户@ pc读取此目录。
单一例外是不够的。例如glob.glob('/var/log/*/*.log')
。我想知道哪些目录存在,但是不可读。
答案 0 :(得分:3)
获取所有无法读取的目录和文件的一种方法是使用os.walk
递归遍历目录树,然后,对于每个目录和文件,使用os.access
检查权限:
import os
unreadable_dirs = []
unreadable_files = []
for dirpath, dirnames, filenames in os.walk('/var/log'):
for dirname in dirnames:
dirname = os.path.join(dirpath, dirname)
if not os.access(dirname, os.R_OK):
unreadable_dirs.append(dirname)
for filename in filenames:
filename = os.path.join(dirpath, filename)
if not os.access(filename, os.R_OK):
unreadable_files.append(filename)
print 'Unreadable directories:\n{0}'.format('\n'.join(unreadable_dirs))
print 'Unreadable files:\n{0}'.format('\n'.join(unreadable_files))
注意:您可以编写自己的遍历目录结构的递归函数,但基本上会复制os.walk
功能,因此我没有看到glob.glob
的用例。