এর সাথে -exec … ;, {}কমান্ডটিতে স্ট্রিংটি যে কোনও অবস্থাতে শূন্য বা দুটি বা আরও বেশি সংখ্যক বার প্রদর্শিত হতে পারে ।
দেখুন এই
কেন আপনি কি করতে চান হতে পারে উদাহরণের জন্য -execব্যবহার না করেই {}।
দুই বা ততোধিক চেহারাগুলো রয়ে দরকারী প্রধানত কারণ মধ্যে (কমপক্ষে) এর কিছু সংস্করণে find, {}নিজেই করে একটি শব্দ হতে হবে না; এটির শুরু বা শেষের দিকে অন্যান্য অক্ষর থাকতে পারে; যেমন,
find . -type f -exec mv {} {}.bak ";"
এর সাথে -exec … +, {}স্ট্রিংটি অবশ্যই শেষ আর্গুমেন্ট হিসাবে উপস্থিত হওয়া উচিত+ । একটি কমান্ড
find . -name "*.bak" -exec mv {} backup_folder +
ছদ্মবেশী find: missing argument to ‘-exec’ত্রুটি বার্তায় ফলাফল ।
নির্দিষ্ট এর এই জন্য একটি কার্যসংক্রান্ত cpএবং mvকমান্ড হল
find . -name "*.bak" -exec mv -t backup_folder {} +
অথবা
find . -name "*.bak" -exec mv --target-directory=backup_folder {} +
{}নিজে একটি শব্দ হওয়া আবশ্যক; এটির শুরু বা শেষে অন্যান্য অক্ষর থাকতে পারে না। এবং (কমপক্ষে) কয়েকটি সংস্করণে findআপনার একাধিক নাও থাকতে পারে {}।
একটি বিবেক নোট: আপনি বলতে পারেন
অনুসন্ধান . -name "* .sh" -প্রকার এফ-এক্সিকিউটেবল-এক্সেক {} }চ্ছিক আরোগুলি এখানে ";"
আপনার প্রতিটি স্ক্রিপ্ট চালাতে। কিন্তু
অনুসন্ধান . -নাম "* .শ" -প্রকার-এফ-এক্সিকিউটেবল-এক্সেক {} +
প্যারামিটার হিসাবে অন্য সমস্তগুলির নাম সহ আপনার স্ক্রিপ্টগুলির একটি চালায় । এটি বলার মতোই
./*.sh
শেল কমান্ড হিসাবে, findএটির ফলাফলগুলি বাছাইয়ের গ্যারান্টি দেয় না, সুতরাং আপনি দৌড়ের সাথে যেমন থাকবেন তেমন আপনাকে দৌড়ানোর aaa.sh
(আপনার বর্ণানুক্রমিক প্রথম *.shফাইল) গ্যারান্টি দেওয়া হয় না ./*.sh।
এর একটি দিকটি findপ্রাথমিকভাবে পুরোপুরি পরিষ্কার নাও হতে পারে হ'ল কমান্ড লাইনটি কার্যকরভাবে একটি আরকেন ভাষায় একটি নির্বাহযোগ্য বিবৃতি । উদাহরণ স্বরূপ,
find . -name "*.sh" -type f -executable -print
মানে
for each file
if the file’s name matches `*.sh` (i.e., if it ends with `.sh`)
then
if it is a plain file (i.e., not a directory)
then
if it is executable (i.e., the appropriate `---x--x--x` bit is set)
then
print the file’s name
end if
end if
end if
end loop
বা, সহজভাবে,
for each file
if the file’s name matches `*.sh` AND it is a plain file AND it is executable
then
print the file’s name
end if
end loop
কিছু -কীওয়ার্ড হ'ল একটি এক্সিকিউটেবল অ্যাকশন এবং পরীক্ষা। বিশেষত, এটি সত্য -exec … ;; উদাহরণ স্বরূপ,
find . -type f -exec grep -q cat {} ";" -print
অনুবাদ
প্রতিটি ফাইলের জন্য
যদি এটি সরল ফাইল হয় (যেমন, ডিরেক্টরি নয়)
তারপর
গ্রেপ-কিউ বিড়াল ফাইলের নাম চালান
যদি প্রক্রিয়া সফল হয় (যেমন, 0 স্ট্যাটাসের সাথে প্রস্থান হয়)
তারপর
ফাইলের নাম মুদ্রণ করুন
শেষ যদি
শেষ যদি
শেষ লুপ
যা স্ট্রিং " cat" যুক্ত সমস্ত ফাইলের নাম মুদ্রণ করবে । এবং এটি যখন এমন কিছু যা grepনিজেই করতে পারে ( -l(লোয়ার-কেস L) বিকল্পের সাহায্যে)) তবে findএটি নির্দিষ্ট স্ট্রিংযুক্ত এবং নির্দিষ্ট আকারের ফাইল রয়েছে এবং নির্দিষ্ট মালিকের মালিকানাধীন ফাইলগুলি খুঁজে পেতে এটি ব্যবহার করে কার্যকর হতে পারে এবং একটি নির্দিষ্ট সময়সীমার মধ্যে পরিবর্তন করা হয়েছিল,…।
তবে, এটি কাজ করে না -exec … +। যেহেতু -exec … +একাধিক ফাইলের জন্য একটি কমান্ড কার্যকর করে, তাই এটি for each file …লুপের অভ্যন্তরে যৌক্তিক শর্ত হিসাবে ব্যবহার করা বোধগম্য নয় ।
... -exec mv {} {}.bak ...সমস্তfindবাস্তবায়নের সাথে প্রত্যাশা অনুযায়ী কাজ করার গ্যারান্টিযুক্ত নয় বলে সাবধান হন । পসিক্স স্ট্যান্ডার্ড রাষ্ট্রগুলি{}অবশ্যই সর্বদা স্বীকৃত হওয়ার জন্য একা উপস্থিত হতে হবে, অন্যথায় অক্ষরগুলি অপরিবর্তিত রাখতে বা পথের নাম দ্বারা তাদের প্রতিস্থাপনের জন্য আচরণটি মুক্ত। পূর্ববর্তী ক্ষেত্রে, আপনার সম্পূর্ণ কমান্ডটি সমস্ত ফাইল মুছে ফেলবে তবে শেষটি পাওয়া গেল ...