একাধিক জিপ ফাইলগুলিতে স্ট্রিং সন্ধান করা হচ্ছে


22

আমি SunOS 5.10 এ কাজ করছি। আমার কাছে একটি ফোল্ডার রয়েছে যাতে প্রায় 200 জিপ ফাইল থাকে। প্রতিটি জিপ ফাইলের মধ্যে এটিতে কেবল একটি পাঠ্য ফাইল থাকে। আমি সমস্ত জিপ ফাইলের সমস্ত পাঠ্য ফাইলগুলিতে একটি নির্দিষ্ট স্ট্রিং সন্ধান করতে চাই।

আমি এটি চেষ্টা করেছি (যা জিপ ফাইলে যে কোনও পাঠ্য ফাইলের জন্য অনুসন্ধান করে যা "ORA-" স্ট্রিং রয়েছে) তবে এটি কার্যকর হয়নি।

zipgrep ORA-1680 *.zip

জিপ ফাইলগুলি সঙ্কুচিত না করে এটি করার কী সঠিক?


আরও দেখুন কীভাবে আমি সংকুচিত সংরক্ষণাগারগুলির মাধ্যমে পুনরাবৃত্তভাবে গ্রেপ করব? (সঠিক সদৃশ নয়, কারণ সেখানে প্রয়োজনীয়তাগুলি আরও জটিল ছিল)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


26

কোনওভাবেই বা অন্যভাবে সংকোচন না করে সংক্ষেপিত ফাইলের মধ্যে সামগ্রীর জন্য অনুসন্ধান করা সম্ভব নয় possible যেহেতু জিপগ্রিপ কেবল শেলসক্রিপ্ট, আনজিপ মোড়ানো এবং নিজেই এনগ্রিপ করা হয়, আপনি নিজে নিজে এটি নিজেই করতে পারেন:

for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done

আপনার যদি কেবল জিপ ফাইলগুলির মিলের তালিকার প্রয়োজন হয় তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন:

for file in *.zip; do
    if ( unzip -c "$file" | grep -q "ORA-1680"); then
        echo "$file"
    fi
done

এইভাবে আপনি ডিস্কে ফাইলগুলি সংক্ষেপিত না করে কেবল স্টডআউট (অর্থাত্ মেমরির) থেকে সংক্ষেপণ করছেন। আপনি অবশ্যই কেবল grep -aজিপ ফাইলগুলি চেষ্টা করতে পারেন তবে ফাইলের সামগ্রী এবং আপনার প্যাটার্নের উপর নির্ভর করে আপনি মিথ্যা ধনাত্মক এবং / অথবা মিথ্যা নেতিবাচক পেতে পারেন।


প্রথম বিকল্পটি কোথায় ফাইলগুলি আনজিপ করবে?
জিগি

2
unzip -cstdout ফাইল decompresses। এটি অন্য কোথাও সম্পূর্ণ সঙ্কুচিত ফাইলটি লিখবে না।
নোহ

আমার দিনটি বাঁচাতে +1 অনেক বেশি চেষ্টা করে। আমি ইকো "$ ফাইল" যুক্ত করতে পারি; আনজিপ-সি "$ ফাইল" | গ্রেপ-কিউ "ORA-1680"; ফাইলের নাম + ফলাফল জানতে।
মাইকে

2
আমার সংস্করণ unzipব্যবহার -pনল স্ট্রিমিং করার জন্য!
gavenkoa

এটি কাজ করে যেখানে সমস্ত একক লাইন কমান্ড "স্ট্যান্ডার্ড আউটপুট" ফিরিয়ে দেয়, কোনও ফাইলের নাম +1 নয়
অ্যালিম্যাক

16

zipgrepএকক ফাইল নেয়। এটি একাধিক ফাইল জুড়ে কাজ করতে এটিকে একটি লুপে রেখে দিন:

for i in *.zip
do
   zipgrep ORA-1680 "$i"
done

2
একটি লাইনে যা জিপ ফাইলের for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
নামটিও

4

AVFS ফাইলসিস্টেম উপহার ফাইলসিস্টেম যেখানে প্রত্যেক আর্কাইভ ফাইল একটি দৃশ্য /path/to/foo.zipডাইরেক্টরি হিসাবে প্রবেশযোগ্য ~/.avfs/path/to/foo.zip#। এটি একটি ফুস ফাইল সিস্টেম, যা আপনি সোলারিসে ইনস্টল করতে পারেন। এভিএফএস বেশিরভাগ সাধারণ সংরক্ষণাগার ফাইল ফর্ম্যাটে পঠনযোগ্য অ্যাক্সেস সরবরাহ করে।

mountavfs
for z in ~/.avfs$PWD/*.zip; do
  find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs   # optional
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.