সন্ধান করুন - এক্সিকিউট আরএম বনাম-মোছা


260

আমি এই দুটি কমান্ডের মধ্যে পার্থক্য বোঝার চেষ্টা করছি:

sudo find / -name .DS_Store -delete

এবং

sudo find / -name ".DS_Store"  -exec rm {} \;

আমি লক্ষ্য করেছি যে execপদ্ধতিটি পছন্দসই। কেন? কোনটি নিরাপদ / দ্রুত / উন্নত? আমি আমার ম্যাকবুক উভয় ব্যবহার করেছি এবং সবকিছুই ঠিকঠাকভাবে কাজ করার জন্য প্রদর্শিত হয়।

উত্তর:


245

-delete এটি আরও ভাল সঞ্চালন করবে কারণ এতে প্রতিটি মিলিত ফাইলের জন্য কোনও বাহ্যিক প্রক্রিয়া তৈরি করতে হয় না।

এটি সম্ভবত আপনি -exec rm {} \;প্রায়শই প্রস্তাবিত দেখতে পান কারণ -deleteএর সমস্ত সংস্করণে বিদ্যমান নেই find। আমি এখনই চেক করতে পারি না তবে আমি নিশ্চিত যে আমি এটি ব্যবহার findনা করেই ব্যবহার করেছি ।

দুটি পদ্ধতিই "নিরাপদ" হওয়া উচিত।

@Doitmyway থেকে কমেন্টের প্রতি সম্পাদনা : নিশ্চিত করুন যে আপনি নামের সাথে মিলছেন এবং তারপরে মুছুন, অন্য উপায়ে নয় (মুছুন, তারপরে ম্যাচ করুন)। অন্যথায় প্রতিটি ফাইল মুছে ফেলা হবে, এটি মেলে কিনা । অর্থাত, না এই কাজ: find / -delete -name .DS_Store

প্রতিটি মিলে যাওয়া ফাইলের জন্য একটি বাহ্যিক প্রক্রিয়া তৈরির ওভারহেড এড়ানোর একটি সাধারণ পদ্ধতি হ'ল:

find / -name .DS_Store -print0 | xargs -0 rm

(তবে মনে রাখবেন যে এখানেও একটি বহনযোগ্য সমস্যা রয়েছে: সমস্ত সংস্করণের সন্ধানটি নেই -print0!)


2
আমি দেখি. আমি আরও পড়েছি যে সুনির্দিষ্ট ফাইল ট্রি মুছে ফেলার -deleteআগে স্যুইচটি ব্যবহার -nameকরেছিলাম, তাই আমার ধারণা আমি সাবধান হতে হবে।
পেঁয়াজ

8
সাম্প্রতিক সময়ে findআপনি -exec rm {} +একক rmকমান্ডের সাহায্যে সমস্ত মিলে যাওয়া ফাইলগুলি সরাতে ব্যবহার করতে পারেন ।
জিম্মিজ

3
.DS_Storeকোনও বিশেষ অক্ষর থাকে না, সুতরাং উদ্ধৃতিগুলি অপ্রয়োজনীয় এবং এই ক্ষেত্রে কিছুই পরিবর্তন করে না।
সেলেদা

1
মূলত শুধুমাত্র শ্বেতস্থান (ফাঁকা জায়গা, ট্যাবগুলি, সম্ভবত অন্যরা) একমাত্র জিনিস যা একটি অনাকাক্সুক্ত স্ট্রিংকে দুটি পৃথক পৃথক কমান্ড লাইন আর্গুমেন্ট হিসাবে ব্যাখ্যা করার কারণ হয়ে থাকে, তবে উদ্ধৃতি দেওয়ার বা না নেওয়ার সিদ্ধান্ত নেওয়ার পরে আপনাকে দুঃখিত হওয়ার দরকার নেই। আপনি সম্পর্কে চিন্তা করতে হবে সব মত শেল metacharacters ;বা |বা >বা <এবং `` এবং আরও অনেক কিছু যা শেল বিশেষ অর্থ আছে, যদি না উদ্ধৃত।
সেলেদা

1
@ মারকোমারসালা xargsকমান্ডের একাধিক অনুরোধকে ভেঙে স্বচ্ছভাবে সীমিত আকারের যুক্তি তালিকার সমস্যার যত্ন নিচ্ছেন ।
সেলেদা

27

.DS_Storeডিরেক্টরিগুলি ফাইল নয় এবং উপস্থাপনকারী হিসাবে ধরে নেওয়া , এটি করার সবচেয়ে দ্রুত পোর্টেবল এখনও দ্রুত উপায় হ'ল:

sudo find / -name .DS_Store -exec rm {} +

sudoনা পাওয়া একমাত্র ঝুঁকি তবে আজকাল এটি বেশ কম।

-deleteবিকল্প গনুহ খুঁজে পেতে এবং এখনও অনেক অন্যান্য অ মান দাবি করত findবাস্তবায়নের, তাই সবসময় পাওয়া যায় না।

কমান্ড সমাপ্তির +পরিবর্তে ফাইল সিস্টেমে প্রতিটি উপস্থিতির জন্য কমান্ড না চালিয়ে \;ক্লজটিকে অত্যন্ত অনুকূল করে execতোলে ।rm.DS_Store


16

আপনার ম্যাকবুকের মতো কোনও মেশিনের জন্য আপনি দুটি কমান্ডের মধ্যে পারফরম্যান্সে খুব বেশি পার্থক্য পাবেন না। তবে, আপনি যদি এক্সেক্স সংস্করণটি দেখেন তবে আপনি একটি সূক্ষ্ম পার্থক্য দেখতে পাবেন:

sudo find / -iname ".file-to-delete"  -exec rm {} \;

এর অর্থ আপনি ".ফিল-টু-মুছুন" নামের এই ফাইলগুলি খুঁজে পাবেন। তবে এই অনুসন্ধানটি কিছু অযাচিত মিথ্যা ইতিবাচক প্রত্যাবর্তন করতে পারে। সুডোর সাথে কিছু করার সময় আপনার আরও কিছুটা যত্নবান হওয়া উচিত। -Exec rm using using ব্যবহারের সুবিধাটি হ'ল আপনি এইভাবে আরএম-তে যুক্তিগুলি পাস করতে পারেন:

sudo find / -iname "*~"  -exec rm -i {} \;

এই উদাহরণে আমি ইম্যাকগুলি তৈরি করা সেই ব্যাকআপ ফাইলগুলি সরাতে চাই। তবে টিল্ড এমন কিছু অস্পষ্ট ফাইল হতে পারে যা আমি জানিনা এবং এটি গুরুত্বপূর্ণ হতে পারে। এছাড়াও আমি মুছে ফেলার বিষয়টি নিশ্চিত করতে চাই। সুতরাং আমি rm কমান্ডে '-i' বিকল্পটি রেখেছি। এটি আমাকে একটি ইন্টারেক্টিভ ডিলিট দেবে।

এছাড়াও আপনি ডিরেক্টরি এবং ফাইলগুলি মুছতে আরএম এর ব্যবহার পরিমার্জন করতে পারেন:

find /usr/local/share/ -iname "useless" -exec rm -r {} \;

সংক্ষেপে, -exec আপনাকে প্রকৃত আদেশের উপর আরও কিছুটা নিয়ন্ত্রণ দেয় যা প্রাপ্ত আইটেমটি সরিয়ে দেয়। সুবিধাটি হ'ল আপনি ফাইলগুলি খুঁজতে একটি সরঞ্জাম ব্যবহার করেন, সেগুলি অপসারণ করার জন্য অন্য একটি সরঞ্জাম। এছাড়াও সন্ধানের ইউটিলিটির প্রতিটি সংস্করণে -ডিলিট বিকল্প নেই। প্রতিটি সরঞ্জাম এর যথাযথ কাজের জন্য ব্যবহার করা আরও ভাল। এটি ইউনিক্স দর্শন - একটি সরঞ্জাম, একটি কাজ, তাদের যা করতে হবে তা করতে তাদের একসাথে ব্যবহার করুন।


3
আরও দেখুন -ok rm {} \;স্থানে -exec rm {} \;ইন্টারেক্টিভ নিশ্চিতকরণ জন্য।
কুসালানন্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.