এটি বর্তমান ডিরেক্টরিটি পরিষ্কার করার সঠিক উপায়?
rm -r * .
এটি বর্তমান ডিরেক্টরিটি পরিষ্কার করার সঠিক উপায়?
rm -r * .
উত্তর:
আমি সাধারণত শ্রেণিবিন্যাসের মধ্যে কেবল একটি স্তর সরিয়ে নিয়ে যাই, তারপর নামটি দিয়ে ডিরেক্টরিটি সরান এবং এটি পুনরায় তৈরি করুন:
cd ..
rm -rf dirname
mkdir dirname
cd dirname
কারণ rm -rf *এটি ভুল ডিরেক্টরিতে ব্যবহারের ত্রুটি কেসকে সরিয়ে দেয় ।
দ্রষ্টব্য: ডিরেক্টরিটিতে যদি মানহীন অনুমতি থাকে বা অন্য কোনও অ্যাকাউন্টের মালিকানা থাকে, আপনি ডিরেক্টরিটি মুছলে এবং পুনরায় তৈরি করার সময় আপনি তা হারাবেন। এটি এমন কিছু নয় যা আমার জন্য প্রায়শই আসে but
যদি আমার কোনও স্ক্রিপ্টে এটি করার দরকার হয়, আমি সম্ভবত একটি ফাংশন তৈরি করব যা বর্তমান ডিরেক্টরিটি সংরক্ষণ করে, একটি স্তরকে সরিয়ে দেয়, মুছে ফেলবে এবং নতুন খালি দির তৈরি করবে এবং সেখানে সরে যাবে।
না, এবং বিভিন্ন কারণে: 1) এই কমান্ডটি মুছে ফেলার চেষ্টা করবে ., যা বর্তমান ডিরেক্টরি, এবং এভাবে ব্যর্থ হবে; 2) এই কমান্ডটি "লুকানো" ফাইলগুলি মুছে ফেলবে না যা একটি 'দিয়ে শুরু হয়। চরিত্র; 3) কমান্ড ডিরেক্টরি মুছে ফেলবে না।
আপনি ব্যবহার করতে পারে rm -rf *। এটি সমস্ত ফাইল এবং ডিরেক্টরিগুলি সরিয়ে ফেলবে, তবে এটি ডটফাইলগুলি সরিয়ে ফেলবে না। আপনি find . -type f | xargs rmলুকানো ফাইলগুলি সহ সমস্ত ফাইল সরাতে ব্যবহার করতে পারেন তবে এটি ডিরেক্টরিগুলি সরাবে না।
সুতরাং, আপনি এটি ব্যবহার করতে পারেন:
$ find . -print0 -type f -o -type d -not -name '\.' | xargs -0 rm -rf
এখানে আপনি পুনরাবৃত্তভাবে সমস্ত ফাইল এবং ডিরেক্টরিগুলি খুঁজে পান (যতক্ষণ না তাদের '।' বলা হয় না) এবং তারপরে সেগুলি মুছে ফেলুন। -print0এবং -0আর্গুমেন্ট এটি সঠিকভাবে সেগুলির নামের মধ্যে উপস্থিত হোয়াইটস্পেস সঙ্গে ফাইলের নামের হ্যান্ডেল করার অনুমতি দেয়।
-print0আরও ভাল ব্যবহার । find-0xargs
rm --recursive * .*[^.]*লিনাক্সে ব্যবহার করতে পারি , এবং ভাবছিলাম যে এটি ইউনিক্সে কাজ করবে কিনা।
rmকমান্ডটি সমস্ত নন-ডট-ফাইল এবং সমস্ত ডট-ফাইল সরিয়ে ফেলবে যা এতে রয়েছে কমপক্ষে একটি নন-ডট চরিত্র। চেষ্টা করুন touch ...(হ্যাঁ, তিন পিরিয়ড), তারপরে এটি চালাচ্ছেন।
touch ...প্রকৃতপক্ষে ...লিনাক্স নামক একটি লুকানো ফাইল তৈরি করে ।
rmআদেশটি মুছে দেয় না (আমি কেবল এটি চেষ্টা করেছি)।
একটি সহজ সমাধান যদি আপনি সন্ধানটি ব্যবহার করতে না চান তা হ'ল বর্তমান ডিরেক্টরিটি সরিয়ে ফেলা হয় তবে এটি আবার তৈরি করুন:
rm -rf "`pwd`" && mkdir "`pwd`" && cd "`pwd`"
pwd। আপনি মুছে ফেলার পরে এটি সঠিকভাবে কাজ করবে কিনা তা আমি নিশ্চিত নই। _dir=$(pwd) ; rm -rf "$_dir" && ...। যদিও এটি পরীক্ষা করা হয়নি, তাই আমি ভুল হতে পারি।
আপনি যদি ব্যাশ ব্যবহার করছেন (সংস্করণ 4 বা তারপরের), আপনি dotglobআপনার গ্লোবটিতে ডট দিয়ে শুরু হওয়া ফাইলের নামগুলি অন্তর্ভুক্ত করতে শেল বিকল্পটি ব্যবহার করতে পারেন ।
shopt -s dotglob
rm -r -- *
উপরেরগুলি কয়েক হাজার হাজার ফাইল সহ ডিরেক্টরিগুলি ভাঙ্গবে; সেক্ষেত্রে আপনি ব্যবহার করতে পারেন printf(যা ব্যাশ বিল্টিন হয়ে এআরজি_ম্যাক্সের মুখে হাসে ) এবং xargs(যা নিরাপদ সংখ্যক যুক্তি সরবরাহ করবে rm)।
shopt -s dotglob
printf '%q ' * | xargs rm -r --
dotglobআপনার সাথে কাজ শেষ হয়ে গেলে আপনি আনসেট করতে পারেন :
shopt -u dotglob
শেল বিকল্পের সাথে গোলমাল না করে এটি করার আর একটি উপায় হ'ল:
rm -r -- * .[^.]* ..?*
## or
printf '%q ' * .[^.]* ..?* | xargs rm -r --
প্রথম গ্লোব *বর্তমান ডিরেক্টরিতে সমস্ত কিছু মেলে যা কোনও বিন্দু দিয়ে শুরু হয় না; দ্বিতীয়টি .[^.]*বিন্দু দিয়ে শুরু হওয়া সবকিছুর সাথে মিলে যায়, তার পরে একক নন-ডট অক্ষর এবং তারপরে অন্য কোনও অক্ষর অনুসরণ করা হয়; তৃতীয় গ্লোব দুটি বিন্দুর সাথে মেলে, তারপরে যে কোনও একটি অক্ষর এবং তারপরে আরও কয়েকটি অক্ষর। আপনি যদি ডটগ্লোব বিকল্প ছাড়াই শেলটিতে আটকে থাকেন তবে এটি কার্যকর হতে পারে; তবে, এ জাতীয় ক্ষেত্রে printfশেল বিল্টিন নাও থাকতে পারে, বা %qপতাকাটির অভাব হতে পারে (যা প্রদত্ত যুক্তিগুলিতে সমস্ত স্থান এবং অস্বাভাবিক চরিত্রের উদ্ধৃতি দেয়, যাতে এটি নিরাপদ করে তোলে xargs), সুতরাং আপনার সম্ভবত একটি ব্যবহার করা উচিত findএই জাতীয় ক্ষেত্রে ভিত্তিক সমাধান।
rm *থাকতে পারে , তাই এর চেয়ে আরও প্রসারিত হতে পারে। দির আইএমএইচও পুনরুদ্ধার করা সেরা বিকল্প (যদি আপনার কাছে হার্ডলিঙ্ক না থাকে তবে এটি কেবল নোংরা)।