2016-04-14 79 views
2

我试图做一个nagios检查来计算在给定的目录下的任何子目录名称“失败”中的文件数量,然后检查max_files阈值。这有点像在bash中做类似for i in `find . -type d -name failed`; do echo $; ls |wc -l $i; done的事情。 (努力学习,而不是回落到bash的更多Python的。是的,这命令不会书面工作,只是张贴说明原因。)Python:在特定命名的子目录中计数文件

我拼凑起来的这种方法,实际上我想要做什么它,但我似乎无法摆脱它产生的所有冗余输出。我试过重新排序for循环,但无济于事。所以我显然错过了一些超级简单的东西。

import os, fnmatch 

def count_files_in_subd(): 
    for root, dirs, files in os.walk("."): 
     print "{} in {}".format(len(files), root) 
     for dirname in fnmatch.filter(dirs, 'failed'): 
      print "{} in {}".format(len(files), root) 

count_files_in_subd() 

这一切之前,我开始做比较文件计数threshholds,但我卡在这部分似乎并不能敲松需要继续思考。

+2

什么是你想要的输出? –

+0

我正在寻找的线沿线的东西: ''/路径/到/ DIR:4 files'' ''/路径/到/ anotherdir:0 files'' 等 可以像也很简单,就像''dirName 4''一样。我不需要任何细节。 (原谅奇怪的格式和编辑,我在这里是新的。) – MagicToaster

回答

0
from os import listdir 

def count_files_in_subd(path): 
    files = listdir(path) 

    if 'failed' in files: 
     failed_files = listdir(path + 'failed/') 
    else: 
     print("There is no failed directory.") 
     return 

    print("There are {} files in the directory {}".format(len(failed_files), path)) 

listdir(path)返回路径中所有文件的列表。使用len()获取listdir(path)的长度将返回列表中的对象数。

另外,这对夫妻被简化为:

print("{}: {}".format(path + 'failed/', len(listdir(path))) 
+0

谢谢。这用于统计我传递给函数的路径中的文件。但我需要它在我传递给函数的路径中找到任何子目录名“失败”(并计算它找到的每个失败目录中的文件)。对不起,如果我不清楚在OP。我会看看我是否可以使用你的(比我想出的简单得多)代码来计算它 – MagicToaster

+0

我更新了答案。 –