সন্ধানের সাহায্যে প্রথম কয়েকটি ম্যাচের ফাইলগুলি খুঁজে পেতে চান?


17

বলুন *.txtকোনও ডিরেক্টরিতে শত শত ফাইল থাকতে পারে । আমি কেবল প্রথম তিনটি *.txtফাইল সন্ধান করতে চাই এবং তারপরে অনুসন্ধানের প্রক্রিয়াটি থেকে বেরিয়ে আসতে চাই।

findইউটিলিটি ব্যবহার করে এটি কীভাবে অর্জন করবেন ? আমি এর ম্যান পেজে একটি চটজলদি করেছিলাম, মনে হয় এটির জন্য এই জাতীয় বিকল্প নেই।


3
আপনি find . -name '*.txt' -print -quitকেবল প্রথম ম্যাচটি দেখান এবং প্রথম ম্যাচের findপরে প্রস্থান করতে পারেন । "এন ম্যাচগুলি সন্ধানের পরে বেরিয়ে আসা" কেসটি খাপ খাইয়ে নেওয়া সম্ভব কিনা তা আমি জানি না।
এনএন

উত্তর:


22

আপনি findমাধ্যমে আউটপুট পাইপ করতে পারে head:

find . -name '*.txt' | head -n 3

2
আমি এটি জানতাম, প্রথম তিনটি ম্যাচ করা ফাইলগুলি সন্ধানের পরে অনুসন্ধানের প্রক্রিয়াটি থেকে বেরিয়ে আসতে চাই। আমি যত্ন নিই না এমন প্রচুর পরিমাণে মিলিত ফাইল থাকতে পারে।
mitnk

2
আমি মনে করি একবার মাথা প্রথম 3 টি ফাইল মুদ্রণ করে ফাইন্ড কমান্ডটি শেষ হয়ে যাবে
ক্রিস কার্ড

1
হ্যাঁ, এটি অদ্ভুত, তবে আপনি ঠিক বলেছেন।
mitnk

19
এটি মোটেও আশ্চর্যজনক নয় - এটি ইউনিক্সে পাইপগুলি কীভাবে কাজ করে। headশুরু হয় এবং পাইপের বাম দিক থেকে ইনপুটটির জন্য অপেক্ষা করে। তারপরে findশুরু হয় এবং সেই ফাইলগুলির সন্ধান করে যা নির্দিষ্ট মানদণ্ডের সাথে মেলে, পাইপটির মাধ্যমে তার আউটপুট প্রেরণ করে। যখন headঅনুরোধ করা লাইনগুলির সংখ্যা প্রাপ্ত এবং মুদ্রিত হবে, তখন এটি পাইপটি বন্ধ করে শেষ করে termin findবদ্ধ পাইপ লক্ষ্য করে এবং এটিও সমাপ্ত হয়। সহজ, মার্জিত এবং দক্ষ।
ডি_বাই

3
সারসংক্ষেপে, -n 3হয় POSIX সামঞ্জস্যপূর্ণ , সেইজন্য এবং সম্ভবত আরো পোর্টেবল যাবে।
l0b0

4

এই অন্য উত্তর কিছুটা ত্রুটিযুক্ত। কমান্ডটি হ'ল

find . -name '*.txt' | head -n 3

তারপরে একটি মন্তব্যে [জোর দেওয়া খনি] এর একটি ব্যাখ্যা রয়েছে :

headশুরু হয় এবং পাইপের বাম দিক থেকে ইনপুটটির জন্য অপেক্ষা করে। তারপরে findশুরু হয় এবং সেই ফাইলগুলির সন্ধান করে যা নির্দিষ্ট মানদণ্ডের সাথে মেলে, পাইপটির মাধ্যমে তার আউটপুট প্রেরণ করে। যখন headঅনুরোধ করা লাইনগুলির সংখ্যা প্রাপ্ত এবং মুদ্রিত হবে, তখন এটি পাইপটি বন্ধ করে শেষ করে termin findবদ্ধ পাইপ লক্ষ্য করে এবং এটিও সমাপ্ত হয়। সহজ, মার্জিত এবং দক্ষ

এটি প্রায় সত্য।

সমস্যাটি কেবল findবদ্ধ পাইপটির দিকে লক্ষ্য করার জন্য যখন এটি এটি লেখার চেষ্টা করে - এই ক্ষেত্রে যখন চতুর্থ ম্যাচটি পাওয়া যায়। তবে চতুর্থ ম্যাচ না থাকলে findঅবিরত থাকবে। আপনার শেল অপেক্ষা করবে! যদি এটি কোনও স্ক্রিপ্টে ঘটে তবে স্ক্রিপ্টটি অপেক্ষা করবে, আমরা ইতিমধ্যে জানি যে পাইপ আউটপুট চূড়ান্ত এবং এর সাথে কিছুই যুক্ত করা যায় না। এত দক্ষ নয়।

প্রভাবটি নগন্য হয় যদি এই নির্দিষ্টটি findনিজে থেকে দ্রুত শেষ হয় তবে একটি বৃহত ফাইল ট্রিে জটিল অনুসন্ধানের সাথে কমান্ড অকারণে আপনার পরবর্তী কাজটি করতে বিলম্ব করতে পারে।

না-তাই-নিখুঁত সমাধান চালানো হয়

( find … & ) | head -n 3

এইভাবে headপ্রস্থান করার পরে, শেলটি তত্ক্ষণাত্ চলতে থাকে। পটভূমি findপ্রক্রিয়াটি তখন উপেক্ষা করা যেতে পারে (এটি শীঘ্রই বা পরে প্রস্থান করবে) বা কোনও কিছুর সাথে লক্ষ্যযুক্ত pkill


ধারণাটি প্রমাণ করতে আপনি অনুসন্ধান করতে পারেন /। আমরা কেবল একটি ম্যাচ প্রত্যাশা করি, তবুও findএটি সর্বত্র সন্ধান করে এবং এতে অনেক বেশি সময় লাগতে পারে।

find / -wholename / 2>/dev/null | head -n 1

সমস্যাটি দেখার সাথে সাথে এটি Ctrl+ দিয়ে শেষ করুন C। এখন তুলনা করুন:

pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.