কেন পুনরাবৃত্তি আরএম এর সাথে উপরের দিকে যায় না?


13

আমি সাধারণভাবে এবং পুনরায় বিশেষভাবে পুনরাবৃত্তির দিক সম্পর্কে ভাবছি।

আরএম পুনরাবৃত্তি শুধুমাত্র নীচের দিকে সঠিকভাবে কাজ করে?

চলমান: sudo rm -R *.QTFSবর্তমান ডিরেক্টরি এবং এর শিশুদের সমস্ত * .QTFS ফাইল মুছে ফেলবে, তাইনা?

বর্তমান ডিরেক্টরী হিসাবে দ্বারা প্রদর্শিত ls -lhaএছাড়াও রয়েছে .এবং ..একটি ভাল শব্দ অভাবের জন্য লিঙ্ক, কেন পুনরাবৃত্তির এই ঊর্ধ্বমুখী ডিরেক্টরি ট্রি অনুসরণ করে না? আরএম অ্যাপে কোনও কৃত্রিম সীমা রয়েছে, না .এবং ..বাস্তব জিনিসগুলি নয়?


5
কারণ মূল, এবং উন্মাদনা,
সেইভাবেই


1
ঠিক আছে, একটি আকর্ষণীয় উপাখ্যানের জন্য ... আমি কেবলমাত্র আমার বীভৎসতাটি দেখতে পেয়েছিলাম যে কোনও ব্যবহারকারীর সাথে খুব গুরুত্বপূর্ণ একটি গুরুত্বপূর্ণ প্রবাহের সাথে কঠোর লিঙ্কযুক্ত স্টাফ রয়েছে, যা আরএম খেতে শুরু করেছিল। হ্যাঁ, আমার বর্তমান ব্যাকআপ ছিল এবং কোনও ডেটা হারিয়ে গেল না, তবে এটি একটি সাবধানতার কাহিনী হতে দিন ... :-)
ব্রায়ান নোব্লাচ

@ ব্রায়ানকনোব্লাচ, একটি হার্ড লিঙ্কটি সরিয়ে দিয়ে কী ক্ষতি হতে পারে? আমি তোমার গল্পের বিন্দুটি পাইনি ...
আলেক্সি

@ অ্যালেক্সা কথাটি হ'ল হার্ড লিঙ্কটি নিজেই সরানো হয়নি। এটি হার্ড লিঙ্কযুক্ত ডিরেক্টরিতে পুনরাবৃত্তি হয়েছিল, যা ফাইল সিস্টেমের একটি উচ্চতর পয়েন্টের সাথে সংযুক্ত ছিল, তাই প্রত্যেকের ডেটা খাওয়া শুরু করেছিল ...
ব্রায়ান নোব্লাচ

উত্তর:


18

rm পুনরাবৃত্তি শুধুমাত্র নীচের দিকে সঠিকভাবে কাজ করে?

rm -r x yমুছে ফেলা হবে xএবং yতাদের ভিতরে থাকা সমস্ত কিছু (যদি তারা ডিরেক্টরি হয়) তবে তাদের পিতামাতা বা তাদের বাইরে কিছু নয়।

চলমান: sudo rm -R *.QTFSবর্তমান ডিরেক্টরি এবং এর শিশুদের সমস্ত * .QTFS ফাইল মুছে ফেলবে, তাইনা?

নং এটা নামে সব ফাইল মুছে ফেলবে *.QTFS, যাও recursively যে কোন ফাইল ভিতরে ডিরেক্টরি নামক *.QTFS, এবং যারা ডিরেক্টরি নিজেদের। আপনি যদি অন্য মুছে ফেলার আচরণ চান তবে ব্যবহার করুন find -delete

বর্তমান ডিরেক্টরী হিসাবে দ্বারা প্রদর্শিত ls -lhaএছাড়াও রয়েছে .এবং ..একটি ভাল শব্দ অভাবের জন্য লিঙ্ক, কেন পুনরাবৃত্তির এই ঊর্ধ্বমুখী ডিরেক্টরি ট্রি অনুসরণ করে না? আরএম অ্যাপে কোনও কৃত্রিম সীমা রয়েছে, না .এবং ..বাস্তব জিনিসগুলি নয়?

এটি একটি কৃত্রিম সীমা rm

এটি আসলে এত কৃত্রিম নয়, যদিও এটি কখনও কাজ করতে পারে way যদি rmপিতামাতৃত ..লিঙ্কগুলি অনুসরণ করা হয় rm -rতবে প্রত্যেকে সমস্ত ..লিঙ্কের সমস্ত পথ অনুসরণ করে সিস্টেমে প্রতিটি ফাইল সরিয়ে ফেলবে /। প্রতিটি ডিরেক্টরিতে থাকা এন্ট্রিগুলিকে rmদেখে ..এবং .এটি লিখিত সামগ্রীটি তালিকাভুক্ত করে এবং স্পষ্টতই সে কারণে তাদের উপেক্ষা করে।

বাস্তবে আপনি এটি চেষ্টা করে দেখতে পারেন। চালান rm -r .এবং বেশিরভাগ rmবাস্তবায়ন কার্যকর করতে অস্বীকার করবে, স্পষ্টভাবে একটি ত্রুটির প্রতিবেদন করবে:

$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’

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

বা .এবং ..বাস্তব জিনিস না?

.এবং ..হয় সাধারণত , বাস্তব ডিরেক্টরির এন্ট্রি যদিও যে ফাইলসিস্টেম-নির্দিষ্ট। এগুলি প্রায় সর্বদা উপস্থাপিত হবে যদিও এগুলি নির্বিশেষে সমস্ত ব্যবহারকারীর কোডের আসল এন্ট্রি। rmপলাতক বা অবাঞ্ছিত পুনরাবৃত্তি ধরা বা আটকাতে সফটওয়্যারটির অনেকগুলি অংশ (কেবল নয় ) তাদের আচরণ বিশেষ করে তোলে।


যে কেউ প্রমাণ খুঁজছেন (বা কেবল সাধারণ আগ্রহী), এটি কীভাবে জিএনইউ কোর্টিলগুলিতে প্রয়োগ করা হয় তা একবার দেখুন ।
ক্রিস হেইস

টুইট প্রকৃত পুনরাবৃত্তির ক্ষেত্রে fts_readবাস্তবায়ন হয়, যদিও এটি কেবল কমান্ড-লাইন আর্গুমেন্টের জন্য।
মাইকেল হোমার

@ মিশেলহোমর ওহ, বাহ! এই লিঙ্ক রঙটি এই এসই স্কিমের বাইরে দাঁড়ায় না । আমার ভুল.
ক্রিস হেইস

2
এই উত্তরটি সঠিক তবে কিছুটা অসম্পূর্ণ। rmএমনকি আর দেখতে পাচ্ছে না *.QTFSকারণ এটি আরএম বাইনারি চালিত হওয়ার আগে বাশ দ্বারা ফাইলের নামগুলিতে গ্লোব-প্রসারিত। @ টোবাইঙ্ক এর উত্তর নোট করে যে।
দেনিথ

পার্শ্ববর্তী হিসাবে, তাদের .এবং ..বিশেষ ক্ষেত্রে আচরণটি
ডটফিলসের

5

পাশাপাশি মাইকেল হোমার যা লিখেছেন তার মধ্যে আরও একটি কারণ রয়েছে যা দুর্ঘটনাক্রমে পিতামাতার ডিরেক্টরিতে পুনরুক্তি করা শক্ত করে তোলে।

আপনার হোম ডিরেক্টরিতে যান এবং কিছু টাইপ করুন:

echo *s*

আপনি দেখতে পাবেন যে এটি ফাইল এবং ডিরেক্টরিগুলির "s" অক্ষরযুক্ত ডিরেক্টরিগুলির একটি তালিকা দেখায়। তবে শীর্ষস্থানীয় বিন্দু দিয়ে আরম্ভ করা কোনও ফাইল দেখানো হয় না। এগুলি দেখানোর জন্য, আপনি ব্যবহার করতে পারেন:

echo .*s*

এটি হ'ল শেলটি *একটি শীর্ষস্থানীয় বিন্দুটি ঘিরে দিতে প্রসারিত করতে অস্বীকার করেছে । এই যে মানে:

rm -fr *

পুনরুদ্ধার করা হবে না ..

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