Rm -rf * বর্তমান ডিরেক্টরিতে সমস্ত ফাইল / ফোল্ডার সরিয়ে দেবে?


20

হবে rm -rf *বর্তমান ডিরেক্টরির মধ্যে সমস্ত ফাইল / ফোল্ডার সরাবেন? আমি নিশ্চিত করতে চাই যে ওয়াইল্ডকার্ড *উচ্চ ডিরেক্টরিতে সরে যাবে না এবং আমার সমস্ত ফাইল সিস্টেম মুছে ফেলবে। : ডি

আমি করছেন মনে রাখবেন chmod 777 .* -Rথেকে chmodলুকানো ফাইল এবং এটি chmodসব ed আমার ফাইলসিস্টেম। স্পষ্টতই, আমি মূল অ্যাকাউন্টে ছিলাম।


1
এ কারণেই আমি rm -rf ./*বর্তমান ডিরেক্টরিটি স্পষ্টভাবে উল্লেখ করেছিলাম ... তবে অঙ্কুর বলে মনে হচ্ছে এটি কোনওভাবেই আসে না।
এমপেন

@ মার্ক: .. এবং .... / .. এর মধ্যে পার্থক্য কী? আপনি সিডি করার চেষ্টা করতে পারেন। .. .. এবং আপনি কোথায় শেষ করেছেন :)
জোহান

@ জোহান: কোনও পার্থক্য নেই ... আমি অনুমান করি এটি আমার উন্মাদ মাথায় আরও বোধগম্য হয়েছে: ডি
এমপেন

@ মার্ক: করণে সহজ ভুল :)
জোহান

উত্তর:


15

না, আপনি যদি নিজের শেলটিকে প্রচুর পরিমাণে টুইট না করেন তবে এটি কোনও দিয়ে শুরু হওয়া ফাইল বা ডিরেক্টরিগুলি সরিয়ে ফেলবে না .। এগুলি অপসারণ করতেও, আপনি হয় সেগুলি পরিষ্কারভাবে তালিকাভুক্ত করতে পারেন

rm -rf .file .dir

বা সঠিক গ্লোব নিদর্শন ব্যবহার করুন (ক্রিসকে ধন্যবাদ)

rm -rf .[^.]* ..?*

সম্পাদনা এখানে বিন্দু যা আপনি ব্যবহার করতে পারবেন না .*মত ফাইল মেলে .file, কারণ .*বা .*?এছাড়াও ম্যাচ হবে ..বা ..[^.]*এর মতো ফাইলের সাথে মেলে .file, যখন ..?*ফাইলগুলির সাথে মেলে ..foo(এক সাথে *শূন্য বা আরও বেশি অক্ষরের সাথে ?মেলে)।


1
..?*".." (উদাঃ ..foo) দিয়ে শুরু হওয়া এন্ট্রিগুলি ধরার মতো আপনারও কিছু দরকার ।
ক্রিস জনসন

@Chris: ঠিক আছে, আমি এই খুঁতখুঁতে উন্মাদ শুরু হলে, আপনার সঠিক;)
বেঞ্জামিন Bannier

এটি কেবল "ডান" গ্লোব নিদর্শনগুলি ব্যবহার করার জন্য নয়, এটি ম্যাচ করা আইটেমগুলির পরিমাণ সম্পর্কেও। ডিরেক্টরিগুলির মধ্যে বিপুল পরিমাণে ফাইল সহ শেল সম্ভবত 50 টি ফাইলকে এক সাথে ঘুরিয়ে দিতে সক্ষম হয় না rm। সুতরাং, * দিয়ে কোনও ডিরেক্টরিতে সামগ্রী মুছে ফেলা বুদ্ধিমানের উপায় নয়, ইমো।
আকিরা

আমি মনে করি ব্যাখ্যা xargsকরা এই প্রশ্নের ক্ষেত্রের বাইরে কিছুটা। উদাহরণস্বরূপ, যখন শেলটি আর্গুমেন্টের তালিকাটি দীর্ঘায়িত করে তখন অভিযোগ করা শুরু করতে পারে।
বেনিয়ামিন ব্যানিয়ের

1
আমি মনে করি এটি সুযোগের বাইরে নয় কারণ আমি মনে করি ওপি তার চূড়ান্ত সমস্যা / সমাধান কীভাবে অর্জন করবেন তা নিশ্চিত নয়: ডিরেক্টরিতে সমস্ত বিষয়বস্তু সরিয়ে ফেলুন। ইতিমধ্যে একটি সমাধান (একটি খারাপ) মাথায় রেখে ও কেন এই সমাধানের কারণে সমস্যার সৃষ্টি হয় তা জিজ্ঞাসা করে ওপি সাধারণ "ভুল" কাজটি করছে। আরও ভাল পন্থা হবে: "ডিরেক্টরিটি নিজেই মোছা না করে কোনও ডিরেক্টরিতে সমস্ত ফাইল মুছবেন কী করে?" ওপির সমাধান কীভাবে গ্লোব্বিং কাজ করে তার প্রকৃতির কারণে সমস্যার সৃষ্টি করবে।
আকিরা

12

আপনি যদি কোনও ডিরেক্টরি এবং এর সমস্ত বিষয়বস্তু মুছে ফেলতে চান তবে আপনি পুরো গ্লোববিং প্রশ্নটি বাইপাস করে নাম হিসাবে chdirপ্যারেন্ট ডিরেক্টরি এবং সেগুলি rm -rfডিরেক্টরিতে into আপনি যদি বিষয়বস্তু সরিয়ে ফেলতে চান তবে ডিরেক্টরিটি রাখতে চান তবে সমস্তটি মুছে ফেলা এবং তারপরে ডিরেক্টরিটি পুনরায় তৈরি করা সহজ।

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


1
এটাই আমি পরামর্শ দেব: ডিরেক্টরিটি ফেলে দিন এবং সম্পন্ন করুন
আকিরা

এমনকি আপনি এটি উত্তর না এটি একটি ভাল ধারণা।
জোহান

10

যেহেতু আমি মনে করি যে এই প্রশ্নটি * কী করে (এবং আরএম নয়) সে সম্পর্কে আরও বেশি, তাই আসুন আমরা অন্য পদ্ধতির চেষ্টা করি।


* কী করে তা আপনি যদি নিশ্চিত না হন তবে আপনি প্রথমে প্রতিধ্বনির মতো ক্ষতিকারক কমান্ড ব্যবহার করে প্রথমে "পরীক্ষা" করতে পারেন। আপনি এটি চালানোর আগে, আপনি যদি আপনার বাড়ির dir এ চালান তবে তারা কী দেখায় তা অনুমান করার চেষ্টা করুন।

echo *
echo .*

তবে প্রথমে একটি খেলার মাঠ তৈরি করা যাক আমরা তারার সাথে খেলতে পারি এবং আমরা কী শেষ করব তা দেখতে পারি see

mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2

এখন এই dir এ আমাদের আছে:

cj@zap:~/star_test$ ls -1a
.
..
.file1
file2

এখন ইকো কমান্ড ব্যবহার করে * কী প্রসারিত হবে তা লক্ষ্য করুন:

cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1

সুতরাং আসুন দেখুন rm কমান্ড দিয়ে কি হয়

cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1

আপনি দেখতে পাচ্ছেন যে তিনি কেবল ফাইল 2 সরিয়েছেন, যেহেতু * কেবল ফাইল 2 এ প্রসারিত হয়েছে। আপনি যদি rm -rf টাইপ করেন *। এটি লেখার মতোই হবে

rm -rf . .. .file1

এবং সত্যি বলতে, যে মজা লাগবে না;)

আশা করি এটি আপনার প্রশ্নের * অংশটি পরিষ্কার করে দিয়েছে।


আপডেট: তবে অঙ্কুর গোয়েল দেখিয়েছে যে কোনও প্রকারের সুরক্ষা তৈরি করা হয়েছে (শেল কমান্ডগুলির জন্য একরকম অস্বাভাবিক :)

আসুন একটি নতুন খেলার মাঠ তৈরি করুন:

cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2

সুতরাং এখন আমাদের আবার এটি আছে, তবে সুরক্ষার জন্য মূলের মালিকানাধীন টেস্ট 1 এর সাথে যদি আরএম বর্শা শুরু করে।

cj@zap:~/star_test/test1/test2/test3$ ls -a
.  ..  file2  .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1

সুতরাং আসুন সমস্ত অপসারণ:

cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
.  ..  file2

এবং দেখে মনে হচ্ছে rm সরিয়ে নেই। এবং .. এমনকি যদি আমরা তাকে বলেছিলাম !!!

সুতরাং এই দীর্ঘ উত্তরের পরে এটি একটি দির সাথে সমস্ত কিছু মুছে ফেলার জন্য নিরাপদ বলে প্রমাণিত হয়েছে:

rm -rf * .*

তবে আমি এটিকে যত্ন সহকারে ব্যবহার করব, যেহেতু আমি নিশ্চিত নই যে rm এর সমস্ত বাস্তবায়ন এই জাতীয় আচরণ করে!


7

হ্যাঁ। rm -rf কেবল বর্তমান ডিরেক্টরিতে ফাইল এবং ফোল্ডারগুলি মুছবে এবং ফাইল ট্রিকে উপরে উঠবে না। আরএম সিমলিংকগুলি অনুসরণ করে এবং তারা যে ফাইলগুলি নির্দেশ করে সেগুলি মুছে ফেলবে না, যাতে আপনি ঘটনাক্রমে আপনার ফাইল সিস্টেমের অন্যান্য অংশগুলিকে ছাঁটাই করেন না।


1

আপনি যদি এমপিজ ০ বলেছিলেন এবং rm -rfএই নির্দিষ্ট ফোল্ডারের মতো এক স্তর উপরে না যেতে চান তবে বর্তমান ফোল্ডারে ব্যতীত এবং বর্তমান ফোল্ডারে সমস্ত ডিরেক্টরি / ফাইলের কাজ করার উপায় রয়েছে :...

rm -rf $(ls -A)

অবশ্যই, যদি ডিরেক্টরি / ফাইলগুলির মধ্যে শেল IFSবিশেষ ভেরিয়েবলের (যেমন স্থান, ট্যাব, নিউলাইন) কোনও একটি অক্ষর থাকে তবে আপনি প্রথমে আইএফএস পরিবর্তন করতে পারেন, কমান্ডটি চালাবেন, এবং তারপর আইএফএস পুনরুদ্ধার করতে পারেন।


0

একটি সম্পূর্ণ ফোল্ডার খালি করার একটি খুব সহজ উপায়, এই উত্তরে আলোচিত "অত্যধিক যুক্তি" বিষয়গুলি এড়ানোও কেবল ডিরেক্টরিটি মুছে ফেলা এবং পুনরায় তৈরি করা। আপনি যখন সিমলিংকড ডিরেক্টরিতে আছেন তখন এটি সঠিকভাবে কাজ করে তা নিশ্চিত করতে, নিম্নলিখিত লাইনগুলি ব্যবহার করুন:

cd ..
rm -rf $(readlink -f yourdir) #remove the directory, treat the case of a symlink
                        # by using readlink, to recreate the linked-to directory
mkdir $(readlink -f yourdir) # recreate the directory to have it empty
cd yourdir

(আপনি যদি এর yourdirপরিবর্তে ব্যবহার $(readlink -f yourdir)করেন তবে মূল অবস্থানটি পূর্ণ থাকাকালীন আপনি কেবলমাত্র লিঙ্কটি প্রতিস্থাপন করবেন)


1
এটি ফোল্ডারের ইনোডের উপর নির্ভরশীল জিনিসগুলি ভেঙে ফেলতে পারে এবং অনুমতি, আটাইম / এমটাইম / সিটাই / বিটাইম, বর্ধিত বৈশিষ্ট্য এবং অ্যাক্সেস নিয়ন্ত্রণ তালিকাকে ফেলে দিতে পারে।
ড্যানিয়েল বেক

@ ড্যানিয়েলব্যাক ধন্যবাদ, ভাল পয়েন্ট। যদিও আমি অবাক হই, হার্ডলিঙ্কগুলি (ডিরেক্টরিগুলিতে, যে কোনওভাবে দৃou়ভাবে নিরুৎসাহিত করা হয়) এর বাইরে কী কী বৈধভাবে নির্ভর করবে? তবে অনুমতি ইত্যাদি গুরুত্বপূর্ণ। সুতরাং সবচেয়ে সাধারণ ক্ষেত্রে একজনের সম্ভবত ব্যবহার করা উচিতxargs ...
টোবিয়াস কেইনজলার

ওএস এক্সে এমন একটি প্রক্রিয়া রয়েছে যা ফাইলগুলি এবং ফোল্ডারগুলিকে চারপাশে সরিয়ে নেওয়া এবং এখনও অ্যাসোসিয়েশন ধরে রাখতে পারে handle সর্বাধিক দৃশ্যমানভাবে খুলুন সাম্প্রতিক ডকুমেন্টস মেনুতে। আফ্রিএইচটি, এটি অভ্যন্তরীণভাবে এটি সম্পাদন করতে ইনোড ব্যবহার করে। আরও তথ্য । অন্যান্য সিস্টেমগুলি জিইআইআই প্রোগ্রামগুলির এপিআইগুলিতে অনুরূপ কিছু প্রয়োগ করে থাকলে আমি অবাক হব না।
ড্যানিয়েল বেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.