ডিরেক্টরি বৃক্ষের প্রতিটি ফাইলের কমান্ড চালানোর সর্বোত্তম উপায়


13

শেল স্ক্রিপ্টে লুপগুলি সহ এটি করার বিভিন্ন উপায় রয়েছে, সন্ধান করুন এবং জার্গার্স রয়েছে। এর মধ্যে কোনটি সেরা, এবং কোনটি সবচেয়ে বহনযোগ্য?

উত্তর:


13
find . -exec <command> {} \;

গাছের মূল হিসাবে বা সাধারণভাবে বর্তমান ডিরেক্টরিতে:

find <directory> -exec <command> {} \;

4
কিছু সিস্টেমে সেখানে-এক্সেক বিকল্প খুঁজে পাওয়া যায় না সেখানে আপনি সন্ধান করতে পারেন। | xargs <কম্যান্ড>
হেমন্ত

4
প্রকৃতপক্ষে, এবং যদি আপনাকে কোনও কিছু দিয়ে ফিল্টার করতে হয় তবে চেষ্টা করুন -name "*.c"বা উদাহরণস্বরূপ -type dডিরেক্টরিতে ...

অনুসন্ধানটি আশ্চর্যজনকভাবে জটিল জিনিসগুলি করতে পারে - সম্পূর্ণ বিকল্প তালিকার জন্য আপনি ম্যান পৃষ্ঠা - unixhelp.ed.ac.uk/CGI/man-cgi?find - পরীক্ষা করতে চাইতে পারেন ।
জোনস

আপনি ফাঁকা জায়গাগুলি সহ ফাইলের নামগুলিও সন্ধান করতে চাইতে পারেন, যা-এক্সেক এবং এক্সগার্সের পদ্ধতিকে ভেঙে দিতে পারে। Tinyurl.com/ygvgmw5
শন চিন

যদি সম্ভব হয় তবে find ... | xargs ...আইডিয়ামটি ব্যবহার করুন , এটি ব্যাচগুলিতে ফাইলগুলি প্রক্রিয়া করে এবং এটি সাধারণত দ্রুত হয় (কম প্রক্রিয়া প্রবর্তন করা হয়)।
ভোনব্র্যান্ড

5

-print0বিকল্পের সন্ধানের জন্য বিকল্প এবং -0বিকল্পগুলির সাথে xargsযদি আপনার শূন্যস্থান সহ ফাইল বা ডিরেক্টরি নাম থাকে:

find {dir} -print0 | xargs -0r {command}

-print0হিসাবে একটি বিকল্প আউট ফাইলের নামের কপি করে প্রিন্ট এটি NUL-separated বরং হোয়াইটস্পেস চেয়ে তালিকা পৃথকীকৃত, যখন -0বিকল্প xargsএটা নির্দেশ করে তার ইনপুট বিরতি NULবরং হোয়াইটস্পেস হয়। যেহেতু NULইউনিক্স ফাইলনামগুলিতে এমন একটি অক্ষর অনুমোদিত নয় যা ফাইলনামের অংশের জন্য এটির ভুল হওয়ার কোনও উপায় নেই।

-rবিকল্প এত যে xargsআপনি একটি ত্রুটি দেবে না যদি এটা কোন ইনপুট হয়েছে।


3

যদি বহনযোগ্যতা একটি সমস্যা হয় তবে আমি এটি করার শেল-নির্দিষ্ট উপায়গুলি থেকে দূরে থাকব (প্রচুর লোক প্রচুর শেল ব্যবহার করে প্রচুর লোক রয়েছে, তবে সাধারণভাবে সন্ধান করা এবং জার্গাগুলি আসলেই এমন মৌলিক সরঞ্জাম যা কেউ কোনও র‌্যাডিক্যাল উপায়ে পরিবর্তনের সাহস পায় না) ।

ফাইন্ড এবং xargs এর প্রাথমিক আর্গুমেন্টগুলি ব্যবহার করা আপনাকে আরও বহনযোগ্য সমাধান দিতে হবে।


2

যদি এক সাথে যুক্তিগুলি দলবদ্ধভাবে গ্রহণযোগ্য হয়, তবে | xargs সম্ভবত আরও ভাল পারফরম্যান্স দেবে, যেহেতু এটি কমান্ডটি ফাইন্ড-এক্সেকের চেয়ে অনেক কম সময় কার্যকর করবে। আপনি যদি প্রতিটি ফাইলের জন্য প্রতিবার কমান্ডটি প্রয়োগ করতে চান বা ফাইলের উপ-ডিরেক্টরিতে এক্সিকিউট করতে চান তবে আপনার সম্ভবত ফাইন্ড-এক্সেক বা-এক্সেকডির ব্যবহার করা উচিত।

একটি নিয়ম হিসাবে, শেল-নির্দিষ্ট লুপগুলি থেকে দূরে থাকা ভাল rable সন্ধান করুন এবং xargs বেশিরভাগ দৃশ্যের জন্য যথেষ্ট।


1

নিশ্চিত হয়ে নিন যে আপনি যে কমান্ডটি ব্যবহার করছেন তার সংস্করণটিতে পুনরাবৃত্তির ক্রিয়াকলাপের জন্য ইতিমধ্যে একটি পতাকা নেই। :)


0
find [args] -print | xargs {command}

আমার জন্য সবচেয়ে ভাল কাজ করে।


2
-1 ফাঁকা স্থান ফাইল ফাইলগুলির জন্য কাজ করবে না। আরও ভাল ব্যবহার-সন্ধান করুন | xargs -0।
স্টার ব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.