2016-04-14 18 views
2

特定のディレクトリでサブディレクトリ名 "failed"のファイル数を数え、max_filesのしきい値をチェックするようにNagiosチェックをしようとしています。これは、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()にすると、リスト内のオブジェクトの数が返されます。

また、このカップルはに単純化すること:

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

ありがとうございます。それは私が関数に渡すパス内のファイルを数えるために働く。しかし、関数に渡すパスにサブディレクトリ名 '' failed ''が含まれていることを確認する必要があります(見つかった各失敗したディレクトリ内のファイルを数えます)。私はOPで不明な場合は申し訳ありません。私はそれを理解するためにあなたのコードを(私が思い付いたものよりもずっと簡単に)使用できるかどうかを確認します。 – MagicToaster

+0

私は答えを更新しました。 –