2011-09-21 20 views
14

क्या कोई पाइथन या बैश स्क्रिप्ट में कोई त्वरित और गंदे तरीका है, जो एक निर्देशिका को फिर से उतर सकता है और कोड की रेखाओं की कुल संख्या को गिन सकता है? हालांकि हम कुछ निर्देशिकाओं को बाहर करने में सक्षम होना चाहते हैं।पाइथन या बैश में कोड की रेखाओं की संख्या की गणना करने के लिए उपयोगिता

उदाहरण के लिए:

start at: /apps/projects/reallycoolapp 
exclude: lib/, frameworks/ 

बाहर रखा निर्देशिका पुनरावर्ती रूप में अच्छी तरह होना चाहिए। उदाहरण के लिए:

/app/projects/reallycool/lib SHOULD BE EXCLUDED 
/app/projects/reallycool/modules/apple/frameworks SHOULD ALSO BE EXCLUDED 

यह वास्तव में उपयोगी उपयोगिता होगी।

+1

निर्देशिका के भीतर सभी फाइलों के लिए लाइनों की कुल संख्या? –

+0

क्या आपको टिप्पणी लाइनों को फ़िल्टर करने की भी आवश्यकता है? –

उत्तर

3
find ./apps/projects/reallycool -type f | \ 
    grep -v -e /app/projects/reallycool/lib \ 
      -e /app/projects/reallycool/modules/apple/frameworks | \ 
    xargs wc -l | \ 
    cut -d '.' -f 1 | \ 
    awk 'BEGIN{total=0} {total += $1} END{print total}' 

कुछ नोट ...

  1. । के बाद खोज महत्वपूर्ण है क्योंकि है कि कैसे cut आदेश फ़ाइल नाम
  2. यह एक बहु आदेश है से गिनती अलग कर सकते हैं, तो यकीन है कि वहाँ रिक्त स्थान के बाद एस्केपिंग स्लैश
  3. आप अन्य फ़ाइलों को छोड़ने के लिए आवश्यकता हो सकती है नहीं कर रहे हैं है एसवीएन या कुछ की तरह। इसके अलावा इस द्विआधारी फ़ाइलों के लिए अजीब मूल्यों दे देंगे ताकि आप विशिष्ट फ़ाइल प्रकार आप, यानी में रुचि रखते हैं श्वेतसूची में ग्रेप का उपयोग करना चाहें: grep -e .html$ -e .css$
36

मिले एक भयानक उपयोगिता Cloc। यहाँ

perl cloc.pl /apps/projects/reallycoolapp --exclude-dir=lib,frameworks 

और उत्पादन

-------------------------------------------------------------------------------- 
Language      files   blank  comment   code 
-------------------------------------------------------------------------------- 
PHP        32   962   1352   2609 
Javascript      5   176   225   920 
Bourne Again Shell    4    45    70   182 
Bourne Shell      12    52   113   178 
HTML        1    0    0    25 
-------------------------------------------------------------------------------- 
SUM:        54   1235   1760   3914 
-------------------------------------------------------------------------------- 
+3

अच्छा, हालांकि यह पाइथन नहीं है, न ही बैश :) – Tadeck

+0

मैक पर आप 'ब्रू इंस्टॉल क्लॉक' कर सकते हैं। –

10

अकेले find और wc तर्क अपनी समस्या को हल कर सकते हैं: https://github.com/AlDanial/cloc

यहाँ आदेश हम भाग गया है।

find के साथ आप इस तरह बहुत ही जटिल तर्क निर्दिष्ट कर सकते हैं: 'चौखटे में

find /apps/projects/reallycoolapp -type f -iname '*.py' ! -path '*/lib/*' ! -path '*/frameworks/*' | xargs wc -l 

यहाँ ! हालत को उलटने तो इस आदेश को नहीं में प्रत्येक अजगर फ़ाइलों के लिए लाइनों की गणना होती है' lib/'या/'निर्देशिकाएं।

बस '*' को न भूलें या यह कुछ भी मेल नहीं खाएगा।

+0

एक्सेलेंट! मैंने बस आखिरी बार थोड़ा सा बदल दिया: ढूंढें/एप्स/प्रोजेक्ट/सचमुच-टाइप करें f -iname '* .py' | xargs wc -l और अब मेरे पास एक बड़ा काउंटर है! –