আপনি যা লিখেছেন তা নিউলাইন দ্বারা পৃথক করা ফাইলের নামের (এবং পাথ) এর তালিকা পাঠায় rm
, কিন্তু আরএম জানেন না that ইনপুটটি কী করবে। এটি কেবল কমান্ড লাইন প্যারামিটারের প্রত্যাশা করে।
xargs
ইনপুট নেয়, সাধারণত নিউলাইন দ্বারা পৃথক করে এবং কমান্ড লাইনে রাখে, তাই xargs যুক্ত করা আপনার কাজটি করে:
find . -name .svn | xargs rm -fr
xargs
এটি যথেষ্ট বুদ্ধিমান যে এটি কেবল যতটা আর্গুমেন্ট rm
গ্রহণ করতে পারে তেমন পাস করবে । সুতরাং, আপনার যদি মিলিয়ন ফাইল থাকে তবে এটি rm
1,000,000 / 65,000 বার চলতে পারে (যদি আপনার শেলটি কমান্ড লাইনে 65,002 টি আর্গুমেন্ট গ্রহণ করতে পারে-65k ফাইল + 1 -fr} এর জন্য rm + 1 এর জন্য)।
ব্যক্তিরা যেমন দক্ষতার সাথে উল্লেখ করেছেন, নিম্নলিখিতগুলিও কাজ করে:
find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf
প্রথম দুটি -exec
ফর্ম উভয়ই rm
প্রতিটি ফোল্ডার মোছার জন্য কল করে , সুতরাং আপনার যদি 1,000,000 ফোল্ডার থাকে rm
তবে 1,000,000 বার আহ্বান করা হবে। এটি অবশ্যই আদর্শের চেয়ে কম। এর আরও নতুন বাস্তবায়ন rm
আপনাকে কমান্ডটি এমন একটি +
ইঙ্গিত দিয়ে শেষ করতে দেয় যা rm
যথাসম্ভব আর্গুমেন্ট গ্রহণ করবে:
find . -name .svn -exec rm -rf {} +
সর্বশেষ সন্ধান / xargs সংস্করণটি মুদ্রণ0 ব্যবহার করে, যা আউটপুট তৈরি করে যা নিউলাইনের \0
পরিবর্তে টার্মিনেটর হিসাবে ব্যবহার করে find যেহেতু পসিএক্স সিস্টেমগুলি কোনও অক্ষরকে \0
ফাইল ফাইলের অনুমতি দেয় তবে আর্গুমেন্টগুলি সঠিকভাবে পাস হয়েছে rm
বা অ্যাপ্লিকেশনটি কার্যকর হয়েছে তা নিশ্চিত করার পক্ষে এটি নিরাপদতম উপায় ।
উপরন্তু, একটি এর -execdir
যে চালানো হবে rm
ডিরেক্টরির যা ফাইল, পাওয়া যায়নি বরং বেস ডিরেক্টরি চেয়ে থেকে এবং একটি -depth
যে গভীরতা প্রথম শুরু হবে।