.gz
সমস্ত ডিরেক্টরি এবং উপ ডিরেক্টরিতে সমস্ত ফাইলের মাধ্যমে আমি কীভাবে পুনরায় পুনরায় স্ট্রিংয়ের জন্য গ্রেপ করব?
.gz
সমস্ত ডিরেক্টরি এবং উপ ডিরেক্টরিতে সমস্ত ফাইলের মাধ্যমে আমি কীভাবে পুনরায় পুনরায় স্ট্রিংয়ের জন্য গ্রেপ করব?
উত্তর:
@ স্টিভ ওয়েট প্রায় আছে। অতিরিক্ত যুক্তি হিসাবে / ডিভ / নাল ব্যবহার করা ফাইল নামটি দেখানোর জন্য বাধ্য করার এক দুর্দান্ত উপায় (আমি মনে করব, স্টিভকে ধন্যবাদ জানাব) তবে এটি এখনও পাওয়া প্রতিটি ফাইলের জন্য এক্সকে চালায় - একটি বিশাল ওভারহেড।
আপনি প্রতিটি নির্বাহের মধ্যে সর্বাধিক সার্থক হয়ে আপনি যতবার পারেন zgrep চালাতে চান:
find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN
xargs
zgrep হিসাবে যতগুলি সম্ভব আর্গ (ফাইলের নাম) সরবরাহ করবে এবং find
কমান্ড দ্বারা সরবরাহিত সমস্ত ফাইল ব্যবহার না করা অবধি এটি বারবার সম্পাদন করবে । ব্যবহার -print0
এবং -0
অপশন এটা কাজ করার অনুমতি দেয় যদি সেখানে ফাইল অথবা ডাইরেক্টরি নামের কোনো শূণ্যস্থান আছে।
ম্যাক ওএস এক্সে, আপনি xargs ছাড়াই একই প্রভাব অর্জন করতে পারেন:
find . -iname '*.gz' -exec zgrep PATTERN {} +
-H
কমপক্ষে GNU গ্রেপ-এ, সর্বদা ম্যাচের লাইনের সাথে ফাইলের নামটি দেখানোর জন্য ব্যবহার করুন ।
$ zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.
তাই কিছু
find . -iname "*.gz" -exec zgrep PATTERN {} \
zgrep -r
গাছের মধ্য দিয়ে যাওয়ার জন্য ব্যবহার করা ভাল বা যদি -r কাজ না করে তবে অনুসন্ধানের ফলাফলটি পাইপ করুনxargs zgrep
/bin/zgrep: -r: option not supported
আমার নতুন ইনস্টল করা উবুন্টু সিস্টেমটি পেয়ে যাচ্ছি।
xargs
পরিবর্তে ব্যবহার করতে পারেন ।
@ আইবুবে প্রায় আছে। কমান্ডটি কাজটি করবে তবে আপনাকে ফাইলের নাম বলবে না
নিম্নলিখিত ফাইলগুলির পাশাপাশি আপনার নামও বলা উচিত:
find . -iname "*.gz" -exec zgrep PATTERN {} /dev/null \;
যোগে /dev/null
যে zgrep নিশ্চিত করবে দুই ফাইলের নামের দেখেন তাই এটি যদি এটি স্ট্রিং খুঁজে বের করে আপনি ফাইলের নাম দেখাবে
সম্পাদনা
আরও গবেষণায় প্রকাশিত হয়েছে যে আমার মেশিনের জন্য (ওএস / এক্স) -exec
যুক্তি সন্ধানের জন্য যথাসম্ভব ফাইলের নাম যুক্ত করবে ( xargs
আচরণের মতো)।
-exec
- আমি বহনযোগ্যতা সম্পর্কে তাই আমি এটি কোনও স্ক্রিপ্টে না ব্যবহার করি, তবে কমান্ড প্রম্পটের জন্য দুর্দান্ত।
find
, তবে বেশিরভাগ আধুনিক সংস্করণগুলির (উদাহরণস্বরূপ দেবিয়ান ভিত্তিক ডিস্ট্রোজে)।
-H
পরিবর্তে কমপক্ষে জিএনইউ গ্রেপ-এ, সর্বদা ম্যাচের লাইনের সাথে ফাইলের নামটি দেখানোর জন্য ব্যবহার করুন /dev/null
।