2016-04-14 2 views
2

Я пытаюсь сделать проверку nagios, чтобы подсчитать количество файлов в любом подкаталоге с именем «failed» в заданной директории, а затем проверить max_files threshhold. Это как-то вроде for i in `find . -type d -name failed`; do echo $; ls |wc -l $i; done в bash. (Попытка узнать больше Python вместо того, чтобы вернуться к bash. Да, эта команда, вероятно, не работает так, как написано, просто опубликована по иллюстративным причинам.)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() 

Это все, прежде чем начать делать то сравнивая количество файлов для порогов, но я застрял на этой части и не могу постучать потерять мышление, необходимое для продолжения.

+2

Что вы желаемый результат? –

+0

Я ищу что-то вдоль линий: ''/путь/к/реж: 4 files'' ''/путь/к/anotherdir: 0 files'' и т.д. Может быть, как просто как '' dirName 4''. Мне не нужно ничего сложного. (Pardon weird форматирование и редактирование, я новичок здесь.) – 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) возвращает список всех файлов на пути. Получение длины listdir(path) с использованием len() вернет количество объектов в списке.

С другой стороны, эта пара будет упрощено до:

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

Спасибо. Это работает, чтобы подсчитать файлы в пути, который я передаю функции. Но мне нужно найти любое имя подкаталога '' failed '' в пути, который я передаю функции (и подсчитывать файлы в каждом не найденном каталоге). Извините, если я не понял в OP. Я посмотрю, смогу ли я использовать ваш (гораздо более простой, чем то, что я придумал), чтобы понять его. – MagicToaster

+0

Я обновил ответ. –

Смежные вопросы