কীভাবে আরএম -আর পুনরাবৃত্তভাবে সরানো যায়? কোন ক্রমে?


30

কিছু অপারেশন আদেশ আছে rm? আমি rmএকটি বৃহত ডিরেক্টরিতে সঞ্চালন করেছি এবং কৌতূহল বোধ করছি যেখানে আমার কী মুছে ফেলা হয়েছে তা দেখার উচিত। কি rmফাইল কাজ প্রথম, তারপর ডিরেক্টরি? অথবা এটি ইনোড টেবিলের কিছু তথ্যের উপর ভিত্তি করে?

স্পেসস: জিএনইউ কোর্টিলস ৮.২২ সিস্টেম থেকে আরএম: আরগ লিনাক্সটি চলমান একটি বিগলেবোনব্ল্যাক ফাইল সিস্টেমের মধ্যে চলছে ইউএসবি ২.০ ব্যবহার করে একটি বহিরাগত সিগেট এইচডিডি (এক্সট ৪) ছিল।

গল্পের:

আমি কিছু ডিরেক্টরি ক্লিনআপ করছিলাম এবং পারফর্ম করছিলাম

cp -r A/ B/ C/ Dest/

অজান্তেই, আমি এটি অনুসরণ করেছিলাম

rm -r A/ B/ C/ Dest/

যখন আমি কেবল সম্পাদন করতে চাইছিলাম

rm -r A/ B/ C/

আমি এটি ধরেছিলাম এবং খুব বেশি দিন Ctrlকেটে Cযাওয়ার আগেই + টিপুন । বিশেষত, আমি যখন & timeকমান্ডের সাথে কমান্ডটি ব্যবহার করছিলাম তখন এটি <3 সেকেন্ড ছিল । আমি ভেতরে গিয়ে পরীক্ষা আশা এটা অবর্তমান হতে, কিন্তু নিম্ন এবং দেখ দেখ পুরো ছিলেন এবং হাজির প্রভাবিত হয় না হবে। এটি বেশ আশ্চর্যজনক হিসাবে বেশ ছোট ছিল। মোট 100-200 এমবি হতে পারে। তবে, এটি 1TB এর সাথে লজ্জাজনক। ডাস্টে একটি সম্পাদন করা / দেখানো হয়েছিল যে বর্ণমালার উভয় প্রান্তে উভয় ফাইল এবং ডিরেক্টরি রয়েছে (যেমন .... .... )।rmcpDest/A/ B/ C/Dest/lsAFile.txtZoo.txt

আমার ভাগ্য rm/ ডিরেক্টরিটি ধ্বংসের আগে কি আমি ভাগ্যবান হয়েছি এবং বাতিল হয়ে গিয়েছিলাম? rmসত্যিই কি ধীর (ধন্যবাদ!)?

যদি তা না হয় তবে কীভাবে rmপুনরাবৃত্তভাবে এমন জিনিসগুলি সরিয়ে ফেলা যায় যা আমি অনুমান করতে পারি যে কী হারিয়ে গেছে?

আমি যা হারিয়েছি তা পুনরুদ্ধার করার জন্য আমি সত্যিই প্রত্যাশা করছি না, সম্ভবত কী উত্সাহিত হয়েছিল তা উত্সাহিত।


উত্তর:


34

rm -rঘুরে ঘুরে এর প্রতিটি যুক্তিতে কাজ করে। যদি একটি আর্গুমেন্ট ডিরেক্টরি হয় তবে এটি ডিরেক্টরিটি (এবং opendirএবং readdirফাংশনগুলি বা কিছু সমতুল্য পদ্ধতি সহ) তালিকাভুক্ত করে এবং প্রতিটি প্রবেশের পরিবর্তে পরিচালনা করে। যদি কোনও এন্ট্রি একটি ডিরেক্টরি হয় তবে এটি পুনরুক্তি করে সেই প্রবেশটি অন্বেষণ করে।

এটি ঠিক একই পদ্ধতি যে অন্যান্য অ্যাপ্লিকেশনের যাও recursively ঢুকা ডিরেক্টরি ব্যবহার - find, ls -Rfইত্যাদি

ট্র্যাভারসাল ক্রমটি অনাকাঙ্ক্ষিত। বেশিরভাগ ফাইল সিস্টেমে অর্ডারটি পুনরুত্পাদনযোগ্য হয় যতক্ষণ ডিরেক্টরিতে কোনও ফাইল যুক্ত করা, অপসারণ বা পুনর্নবীকরণ করা না হয় (অর্ডারটি তাত্ত্বিকভাবে সম্পূর্ণরূপে এলোমেলো হতে পারে এবং প্রতিবার পরিবর্তন হতে পারে, তবে যেখানে ঘটে সেখানে আমি ফাইল সিস্টেমের কথা ভাবতে পারি না)। কয়েকটি ফাইল সিস্টেমে সাধারণত ফাইলের নাম থেকে বা ফাইলগুলি যেভাবে তৈরি করা হয়েছিল বা উভয়ের সংমিশ্রণ থেকে অর্ডারটি নির্ধারণ করা যেতে পারে, তবে আপনাকে ফাইল সিস্টেমের সূক্ষ্ম বিবরণটি জানতে হবে এবং তার উপর নির্ভর করে এটি পৃথক হতে পারে ড্রাইভার সংস্করণ। ট্র্যাভারসাল ক্রম এমন কিছু নয় যা আপনি নির্ভর করতে পারেন।

নোট করুন lsবা echo *ফাইলগুলি তাদের নামের লিক্সোগ্রাফিক ক্রমে বাছাই করুন। findএবং ls -fবাছাই না।

আপনি যে বিষয়টিতে নির্ভর করতে পারেন তা হ'ল আর্গুমেন্টগুলি সঠিকভাবে পরিচালনা করা হয়। সুতরাং যদি C/এখনও আংশিক সেখানে ছিল, এর অর্থ এটি Dest/অচ্ছুত ছিল। যদি C/চলে যায় তবে আপনি Dest/ডিরেক্টরি পরিবর্তনের সময় যাচাই করে ফাইলগুলি সরিয়ে ফেলা হয়েছে এবং সময়ের সাথে C/মুছে ফেলা হয়েছে বা অনুলিপিটি শেষ হওয়ার সময়টির সাথে তুলনা করে একটি ধারণা পেতে পারেন । মুছে ফেলা হবে প্রথম ফাইলটি Dest/হায়ারার্কির সরাসরি বা কোথাও গভীর কোনও ফাইল হতে পারে Dest/যা rmট্র্যাভার্সের ক্ষেত্রে ঘটেছিল প্রথম প্রবেশিকাটি ডিরেক্টরি ছিল কিনা তা নির্ভর করে ।

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


2
-fবিকল্প lsসমতূল্য হিসেবে নথিভুক্ত করা -aUহয়, যেখানে -aমানে সব ফাইল এবং তালিকা -Uউপায়ে পাঁচমিশালী। আমি অস্পষ্টভাবে এমন একটি সংস্করণের মুখোমুখি স্মরণ করছি lsযার মধ্যে -fকাজ হয়নি (আমি মনে করি এটি অন্য কিছু হিসাবে সংজ্ঞায়িত হয়েছিল) কিন্তু হয়েছিল -aU
জি-ম্যান 'পুনর্বহাল মনিকা' বলে

2
@ জি-ম্যান পসিক্স সংজ্ঞা দেয় -f( এক্সএসআই এক্সটেনশন হিসাবে ); এর প্রকৃত অর্থে বাছাই করা ছাড়াও অন্যান্য প্রভাব রয়েছে। এটি ভি 7-এ ফিরে যায়, সুতরাং আশ্চর্যজনকভাবে ব্যাসিবক্সকে বাদ দিয়ে কোনও বাস্তবায়ন খুঁজে পেতে আপনাকে কঠোর চাপ দেওয়া হবে। -Uযেহেতু কেবল অরসোর্টড হ'ল একটি জিএনইউ বৈশিষ্ট্য, আমি মনে করি না এটি অন্য কোথাও রয়েছে।
গিলস 17'6


@ টিম নং আপনি ls -Uএকটি ডিরেক্টরি চালিয়ে পরীক্ষা করতে পারেন । এটি একই আদেশ যা rm -rসেই ডিরেক্টরিতে কাজ করবে। নোট করুন যে কোনও ফাইল যুক্ত করা বা অপসারণ করা অন্য ফাইলগুলির ক্রম পরিবর্তন করতে পারে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

ধন্যবাদ। (1) "একটি ফাইল যুক্ত করা বা অপসারণ অন্য ফাইলগুলির ক্রম পরিবর্তন করতে পারে" ", তাই দুর্ঘটনাক্রমে আংশিক অপসারণের পরে, ls -Uবেঁচে থাকা ডায়াররা কি অচ্ছুক কিনা তা জানতে সাহায্য করে না? (২) -উ অর্থ "ডিরেক্টরি ক্রমে তালিকাভুক্ত তালিকা"। -U এর অর্থ ডিয়ার ডিরেক্টরিতে প্রবেশের ক্রম?
টিম

5

গিলস যেমন বলেছে, আপনি সাধারণত কোনও ডিরেক্টরিতে মুছে ফেলার ক্রমটি পূর্বাভাস দিতে পারেন না, কেবলমাত্র শীর্ষ স্তরের ডিরেক্টরিগুলি কমান্ড লাইনের ক্রমে প্রক্রিয়া করা হবে।

যাইহোক, আপনি গ্যারান্টিযুক্ত যে এটি নীচের দিক থেকে ডিরেক্টরি স্তরক্রম মুছে ফেলবে, কারণ ইউনিক্স কেবল ডিরেক্টরিগুলি খালি থাকলে মুছে ফেলার অনুমতি দেয়। সুতরাং একটি ডিরেক্টরি মুছতে, প্রথমে এটিতে থাকা সমস্ত কিছু মুছে ফেলতে হবে। যদি এতে উপ-ডিরেক্টরি থাকে তবে এটি প্রথমে তাদের সামগ্রীগুলি মুছে ফেলতে হবে এবং এগুলিও।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.