पायथन शेबंग के साथ सभी फाइलें खोजें


9

मैं एक बड़े स्रोत वृक्ष के खिलाफ PEP8 जांच चलाने की कोशिश कर रहा हूं। पेड़ विभिन्न भाषाओं में फाइलों के मिश्रण से बना है। स्पष्ट रूप से उन्हें सूचीबद्ध किए बिना सभी पायथन लिपियों की जांच करने का विचार है। इन फ़ाइलों के बहुमत वास्तव में एक .pyविस्तार नहीं है। क्या शेबबैंग में पायथन शब्द के साथ सभी फाइलों को खोजने या उन सभी फाइलों को खोजने का एक आसान तरीका है जो निष्पादित होने पर पायथन के साथ चलाए जाएंगे?

जवाबों:


7

ऐसा करने का प्रयास करें:

grep -rl '^#!/.*python' .

एसी के साथ एक ही बात :

ack -rl '^#!/.*python' .

5
ध्यान दें कि grep -lजैसे ही कोई फ़ाइल ढूंढना बंद करता है, जैसे ही उसे कोई मेल मिलता है, बिना मिलान वाली फ़ाइलों के लिए, वह पूरी फ़ाइल को पढ़ लेगी। यह फाइलों के बीच में भी मैच ढूंढता है, इसलिए उदाहरण के लिए यह एक ऐसी sharफाइल पर मेल कर सकता है जिसमें अजगर लिपियाँ हों।
स्टीफन चेज़लस

14

GNU, या FreeBSD या NetBSD या OpenBSD (और संभावित रूप से अन्य) के साथ awk:

find . -type f -exec awk '
  /^#!.*python/{print FILENAME}
  {nextfile}' {} +

केवल प्रत्येक फ़ाइल की पहली पंक्ति को देखेगा और awkआवश्यकतानुसार कुछ s को चलाएगा ।

nextfileबयान से ऊपर मानक नहीं है, लेकिन जीएनयू एक (जो शायद है यह जहां से उत्पन्न) सहित कुछ कार्यान्वयन में पाया जाता है।

हालांकि ऊपर दिया गया कोड अन्य कार्यान्वयन में भी काम करता दिखाई देगा, लेकिन nextfileस्टेटमेंट वहां कुछ भी नहीं करेगा (एक परेशान nextfileचर में शामिल अभिव्यक्ति के रूप में पहचाना जाएगा ), इसका मतलब है कि सभी फाइलें पूरी तरह से पढ़ी जाएंगी और फ़ाइल नाम हर मिलान लाइन के लिए मुद्रित किया जाए।

यदि आपका awkसमर्थन FNR(जैसे POSIX awks करते हैं, लेकिन मूल नहीं awk, तो Solaris पर /usr/xpg4/bin/awkऔर नहीं /usr/bin/awk) और नहीं nextfile, आप इसे लिख सकते हैं:

find . -type f -exec awk 'FNR == 1 && /^#!.*python/{print FILENAME}' {} +

जो अभी भी awkसंभव के रूप में कुछ s चलेंगे, लेकिन फ़ाइलों को पूरी तरह से पढ़ेंगे।

फ़ाइलों को पूरी तरह से पढ़ने से बचने के लिए एक और विकल्प जो हर काम करेगा awkऔर findइसका मतलब होगा कि awkप्रति फ़ाइल एक चलना होगा:

find . -type f -exec awk '
  /^#!.*python/{r=1};{exit}
  END {exit(1-r)}' {} \; -print

1
+1, लेकिन अंतिम कमांड खाली फाइलों से भी मेल खाता है।
l0b0

शुभ अंक @ l0b0 अपडेट किया गया।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.