find
প্রথম ম্যাচটি সন্ধান করার পরে কমান্ডকে ডান থামানোর জন্য বাধ্য করার কোনও উপায় আছে ?
find
প্রথম ম্যাচটি সন্ধান করার পরে কমান্ডকে ডান থামানোর জন্য বাধ্য করার কোনও উপায় আছে ?
উত্তর:
জিএনইউ বা ফ্রিবিএসডি এর সাহায্যে find
আপনি -quit
প্রিডিকেটটি ব্যবহার করতে পারেন :
find . ... -print -quit
নেটবিএসডি find
সমতুল্য:
find . ... -print -exit
আপনি যদি সমস্ত কিছু করেন তবে নাম মুদ্রণ করা হয় এবং ধরে নেওয়া হয় যে ফাইলের নামগুলিতে নতুন লাইন অক্ষর নেই, আপনি করতে পারেন:
find . ... -print | head -n 1
find
এটি প্রথম ম্যাচের পরে থামবে না , তবে সম্ভবত দ্বিতীয় ম্যাচের সময় নির্ধারণ এবং বাফারিংয়ের উপর নির্ভর করে বা পরে (অনেক কিছু)। মূলত, find
একটি সাইনপাইপ দিয়ে শেষ করা হবে যখন এটি head
ইতিমধ্যে চলে যাওয়ার সময় কিছু আউটপুট দেওয়ার চেষ্টা করে কারণ এটি ইতিমধ্যে ইনপুটটির প্রথম লাইনটি পড়ে এবং প্রদর্শিত হয়েছে।
মনে রাখবেন যে সমস্ত শেলগুলি ফিরে আসার find
পরে সেই আদেশটির জন্য অপেক্ষা করবে না head
। বোর্ন শেল এবং এটি অ্যান্ড টি বাস্তবায়ন ksh
(যখন অ ইন্টারেক্টিভ নয়) এবং yash
(কেবলমাত্র সেই পাইপলাইনটি কোনও স্ক্রিপ্টের শেষ কমান্ড হয়) তা ব্যাকগ্রাউন্ডে চলবে না। আপনি যদি কোনও শেলের পরিবর্তে সেই আচরণটি দেখতে চান তবে আপনি সর্বদা উপরেরটি এতে পরিবর্তন করতে পারেন:
(find . ... -print &) | head -n 1
যদি আপনি পাওয়া ফাইলগুলির পাথ মুদ্রণের চেয়ে আরও বেশি কিছু করেন তবে আপনি এই পদ্ধতির চেষ্টা করতে পারেন:
find . ... -exec sh -c 'printf "%s\n" "$1"; kill "$PPID"' sh {} \;
( printf
আপনি যে ফাইলটি দিয়ে যাবেন তা প্রতিস্থাপন করুন)।
এটি find
প্রস্থান স্থিতি ফিরে আসার পার্শ্ব প্রতিক্রিয়াটি দেখায় যে যদিও এটি নিহত হয়েছিল।
প্রকৃতপক্ষে, SIGTERM ( kill -s PIPE
পরিবর্তে kill
) এর পরিবর্তে SIGPIPE সিগন্যাল ব্যবহারের ফলে কিছু শাঁস সেই মৃত্যু সম্পর্কে আরও নীরব হয়ে উঠবে (তবে এখনও শূন্য-বহির্গমন স্থিতি ফিরে আসবে)।
if [[ $(find ... -print -quit) ]]; then ...
তা পরীক্ষা করে দেখবে: এটি প্রিন্ট করা কিছু পাওয়া যায় কিনা তা পরীক্ষা করে।
$(…)
আপনি কেবলমাত্র একক বন্ধনী ব্যবহার করছেন সে ক্ষেত্রে @ টোবিয়ার অংশটি উদ্ধৃতিতে রেখে দেওয়া ভাল [ … ]
।
[
একটি মানক কমান্ড। এটি এতটা কমান্ড নয় যে ভয়াবহ তবে বোর্নের মতো শেলগুলি কমান্ড লাইনকে পার্স করার উপায়। [[...]]
এটি একটি কেএসআর কনস্ট্রাক্ট যা বিভিন্ন শেলের নিজস্ব ইস্যু রয়েছে। উদাহরণস্বরূপ, সাম্প্রতিক অবধি [[ $(...) ]]
কাজ করা হয়নি zsh
(আপনার প্রয়োজন [[ -n $(...) ]]
) needed এগুলি ব্যতীত zsh
আপনার উদ্ধৃতিগুলি দরকার [[ $a = $b ]]
, [[ =~ ]]
বাস্তবায়নের মধ্যে এমনকি বাশের সংস্করণ এবং কিছুতে কয়েকটি বাগের মধ্যেও অসম্পূর্ণ পার্থক্য রয়েছে। ব্যক্তিগতভাবে, আমি পছন্দ করি [
।
...
? ।
find . -name something -print -quit
এটি মুদ্রণের পরে প্রথম ম্যাচের পরে খুঁজে পাওয়া শেষ করে।
নির্দিষ্ট পরিমাণের ম্যাচ এবং মুদ্রণের ফলাফলের পরে অনুসন্ধানটি সমাপ্ত করুন:
find . -name something -print | head -n 5
আশ্চর্যজনকভাবে যথেষ্ট - মাথা এখন 5 ম্যাচের পরে স্ট্রিং শেষ করে, যদিও কীভাবে বা কেন জানি না।
এটি পরীক্ষা করা খুব সহজ। শুধু দিন অনুসন্ধান খুঁজে একটি রুট যা হাজার হাজার হয়তো, আরও বেশি ম্যাচ স্থাপিত হবে যখন অন্তত একটি মিনিট বা তার বেশি গ্রহণ। তবে "হেড" "পাই" তে পাইপ দেওয়া হলে মাথার নির্ধারিত রেখাগুলির নির্দিষ্ট পরিমাণের পরে সমাপ্ত হবে (ডিফল্ট শিরোনাম 10 দেখায়, লাইন নির্দিষ্ট করতে "হেড-এন" ব্যবহার করুন)।
নোট করুন যে "হেড-এন" নির্দিষ্ট করা নিউলাইন চরিত্রের গণনায় পৌঁছানোর পরে এটি সমাপ্ত হবে এবং অতএব যে কোনও মিলের মধ্যে একাধিক নিউলাইন অক্ষর রয়েছে according
বিনোদনের উদ্দেশ্যে, এখানে বাশের একটি অলস সন্ধানকারী জেনারেটর। এই উদাহরণটি বর্তমান ডিরেক্টরিতে থাকা ফাইলগুলির উপরে একটি রিং তৈরি করে। আপনি পড়তে চান তবে অনেকগুলি পড়ুন kill %+
(সম্ভবত কেবল 1)
#!/usr/bin/env bash
unset -v files n
trap 'kill "$x_PID"' EXIT
coproc x while :; do
find . -type f -maxdepth 1 -exec sh -c "$(</dev/fd/3)" _ {} +
done 4<&0 <<\EOF 3<&0 <&4-
for x; do
read -r _
printf '%s\0' "$x"
done
EOF
while
echo >&${x[1]}
IFS= read -rd '' -u "$x" 'files[n++]'
do
printf '%q ' "${files[@]}"
echo
sleep .2
done
, grep যদি পতাকা দিয়ে ব্যবহার করা ফেরৎ -m
, যাতে
find stuff | grep -m1 .
এটি প্রথম লাইনের সাহায্যে মুদ্রণের পরে ফিরে আসবে।
এর মধ্যে পার্থক্যটি find stuff -print -quit | head -1
হ'ল যদি অনুসন্ধানটি দ্রুত হয় তবে গ্রাপ সময়মতো প্রক্রিয়াটি থামাতে সক্ষম না হতে পারে (যদিও এটি সত্যিকার অর্থে কিছু যায় আসে না), যদিও অনুসন্ধান দীর্ঘ হলে এটি প্রিন্ট করার জন্য প্রয়োজনীয় নয় অনেকগুলি ফাঁকা করে দেবে লাইন।
এটি পরিবর্তে ব্যস্তবক্স অনুসন্ধানের সাথে কাজ করে, যদিও ব্যস্তবক্সের গ্রেপ থেকে -m
এটি আসলে প্রয়োজন হয় না
find /tmp/stuff -exec "sh" "-c" "eval 'echo {}; { kill \$PPID; }'" \;
এটি (সাধারণত) সিগটার্ম সংকেত প্রাপ্তির সন্ধানের প্রক্রিয়া সম্পর্কে একটি বার্তা ছুঁড়ে দেবে, তবে এই আউটপুটটি চলমান শেলের অন্তর্ভুক্ত, ফাইন্ড কমান্ড নয় সুতরাং এটি কমান্ড আউটপুট নিয়ে বিঘ্নিত হয় না, অর্থ পাইপ বা পুনর্নির্দেশগুলি কেবল লাইনটিকে আউটপুট দেবে meaning মেলে