জিএনইউ, বা ফ্রিবিএসডি বা নেটবিএসডি বা ওপেনবিএসডি (এবং সম্ভাব্য অন্যরা) সহ 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
grep -l
কোনও ফাইল মিল পাওয়া মাত্রই এটি পড়া বন্ধ করে দেবে, কোনও মিল নেই এমন ফাইলগুলির জন্য এটি পুরো ফাইলটি পড়বে। এটি ফাইলগুলির মাঝখানে মিলও খুঁজে পেতে পারে, সুতরাং এটি উদাহরণস্বরূপshar
পাইথন স্ক্রিপ্টগুলি ধারণ করে এমন কোনও ফাইলে মিলতে পারে ।