পাইথন শেবাং সহ সমস্ত ফাইল সন্ধান করুন


9

আমি একটি বড় উত্স গাছের বিরুদ্ধে একটি পিইপি 8 চেক চালানোর চেষ্টা করছি। গাছটি বিভিন্ন ভাষায় ফাইলগুলির মিশ্রণ নিয়ে গঠিত। ধারণাটি হ'ল সমস্ত পাইথন স্ক্রিপ্টগুলি তাদের স্পষ্টভাবে তালিকাভুক্ত না করে চেক করা। এই ফাইলগুলির বেশিরভাগেরই আসলে কোনও .pyএক্সটেনশন নেই। শেবাংয়ে পাইথন শব্দযুক্ত সমস্ত ফাইল সন্ধান করার বা মৃত্যুদণ্ড কার্যকর করার সময় পাইথন দিয়ে চালিত সমস্ত ফাইল সন্ধান করার কি সহজ উপায় আছে?

উত্তর:


7

এটি করার চেষ্টা করুন:

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

আককের সাথে একই জিনিস :

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

5
মনে রাখবেন যে grep -lকোনও ফাইল মিল পাওয়া মাত্রই এটি পড়া বন্ধ করে দেবে, কোনও মিল নেই এমন ফাইলগুলির জন্য এটি পুরো ফাইলটি পড়বে। এটি ফাইলগুলির মাঝখানে মিলও খুঁজে পেতে পারে, সুতরাং এটি উদাহরণস্বরূপ sharপাইথন স্ক্রিপ্টগুলি ধারণ করে এমন কোনও ফাইলে মিলতে পারে ।
স্টাফেন চেজেলাস

14

জিএনইউ, বা ফ্রিবিএসডি বা নেটবিএসডি বা ওপেনবিএসডি (এবং সম্ভাব্য অন্যরা) সহ awk:

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

প্রতিটি ফাইলের প্রথম লাইনে তাকান এবং awkপ্রয়োজনীয় হিসাবে কয়েকটি চালিত হবে ।

nextfileবিবৃতিতে উপরে মান নয় বরং গনুহ এক (যা সম্ভবত এটা কোথা থেকে সম্ভূত) সহ কয়েকটি বাস্তবায়নের পাওয়া যায়।

উপরের কোডটি অন্য প্রয়োগেও কাজ করবে বলে মনে হচ্ছে, nextfileবিবৃতিটি সেখানে কিছুই করবে না (কোনও আনসেট nextfileভেরিয়েবল সমন্বিত একটি এক্সপ্রেশন হিসাবে স্বীকৃত হবে ), যার অর্থ এই হবে যে সমস্ত ফাইল পুরোপুরি পঠিত হবে এবং ফাইলটির নাম হবে প্রতিটি ম্যাচিং লাইনের জন্য মুদ্রণ করা হবে।

আপনার যদি awkসমর্থন FNR(POSIX awks মত কিন্তু মূল না awk, তাই সোলারিস উপর /usr/xpg4/bin/awkএবং /usr/bin/awkএবং) nextfile, আপনি এটি লিখতে পারেন:

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

যা এখনও যতগুলি awkসম্ভব সংখ্যক চলতে পারে তবে ফাইলগুলি পুরোপুরি পড়তে পারে।

ফাইলগুলি পুরোপুরি পড়া এড়ানোর জন্য আরেকটি বিকল্প এবং এটি প্রত্যেকের সাথে কাজ করবে awkএবং findতার অর্থ awkপ্রতি ফাইলের জন্য একটি চালানো হবে:

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

1
+1, তবে শেষ কমান্ডটি খালি ফাইলগুলির সাথেও মেলে।
l0b0

ভাল পয়েন্ট @ l0b0। আপডেট করা হয়েছে।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.