ব্যাশ সন্ধান xargs শুধুমাত্র একক ঘটনা


16

হতে পারে এটি কিছুটা অদ্ভুত - এবং এটি করার জন্য অন্যান্য সরঞ্জামও রয়েছে তবে, ভাল ..

আমি কয়েকটি ক্লাসযুক্ত সমস্ত ফাইল সন্ধান করতে নিম্নলিখিত ক্লাসিক বাশ কমান্ডটি ব্যবহার করছি:

find . -type f | xargs grep "something"

আমার একাধিক গভীরতায় ফাইল রয়েছে। "কিছু" এর প্রথম ঘটনাটি আমার পক্ষে যথেষ্ট, তবে অনুসন্ধান চালিয়ে যাওয়া সন্ধান করে এবং বাকী ফাইলগুলি সম্পূর্ণ করতে দীর্ঘ সময় নেয়। আমি যা করতে চাই তা হ'ল গ্রেপ থেকে ফিরে আসা "প্রতিক্রিয়া" এর মতো এমন কিছু যা যাতে আরও বেশি ফাইল অনুসন্ধান করা বন্ধ হয়। এমন কি সম্ভব?

উত্তর:


20

কেবল এটি সন্ধানের ক্ষেত্রের মধ্যে রাখুন:

find . -type f -exec grep "something" {} \; -quit

এটা এভাবে কাজ করে:

-execকাজ কবে আসবে -type fসত্য হতে হবে। এবং কারণ যখন grepরিটার্ন 0(সাফল্য / সত্য) এর -exec grep "something"সাথে ম্যাচ হয়, তখন -quitট্রিগার করা হবে।


8
find -type f | xargs grep e | head -1

ঠিক তেমনটি করে: যখন headসমাপ্ত হয়, পাইপের মাঝারি উপাদানটি একটি 'ভাঙা পাইপ' সিগন্যাল দ্বারা অবহিত হয়, ঘুরে ফিরে শেষ হয় এবং অবহিত করে find। আপনি যেমন একটি নোটিশ দেখতে হবে

xargs: grep: terminated by signal 13

যা এটি নিশ্চিত করে।


ব্যাখ্যা এবং বিকল্পের জন্য +1, যদিও অন্য উত্তরটি আমার কাছে আরও মার্জিত বলে মনে হচ্ছে, যেহেতু এটি আরও স্বাবলম্বী
হ্যালো_আরথ

8

সরঞ্জাম পরিবর্তন না করে এটি করতে: (আমি xargs পছন্দ করি)

#!/bin/bash
find . -type f |
    # xargs -n20 -P20: use 10 parallel processes to grep files in batches of 20
    # grep -m1: show just on match per file
    # grep --line-buffered: multiple matches from independent grep processes
    #      will not be interleaved
    xargs -P10 -n20 grep -m1 --line-buffered "$1" 2> >(
        # Error output (stderr) is redirected to this command.
        # We ignore this particular error, and send any others back to stderr.
        grep -v '^xargs: .*: terminated by signal 13$' >&2
    ) |
    # Little known fact: all `head` does is send signal 13 after n lines.
    head -n 1

1
+1 কখনই জানত না যে জার্গাগুলিতে এমন মাল্টিটাস্কিং ক্ষমতা থাকবে - অন্যান্য মন্তব্যের জন্যও ধন্যবাদ! :)
হ্যালো_আর্থি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.