2016-04-14 36 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

我更新了答案。 –

相關問題