নামে একটি হাইফেন সহ একটি ইউনিক্স ডিরেক্টরি মুছে ফেলা হচ্ছে


13

আমার পক্ষ থেকে একটি অস্থির কান্ডের চালকের মাধ্যমে, আমি ঘটনাক্রমে (উদাহরণস্বরূপ) -A নামে একটি ডিরেক্টরি তৈরি করেছি এবং ফাইলগুলি পূরণ করে শেষ করেছি।

আমি ডিরেক্টরিটি মুছে ফেলতে চাই। আমি চেষ্টা করেছিলাম:

rmdir -- -A

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

এই সমস্যাজনক ডিরেক্টরি থেকে মুক্তি পেতে আমার কী করা উচিত?


5
ভাগ্যক্রমে ডিরেক্টরিটির নাম '-rf *' রাখা হয়নি।
ব্যবহারকারী1686

উত্তর:


29

প্রতিটি কমান্ড - ব্যবহার করুন।

$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ mkdir -- -A
$ ls -la
total 36
drwxr-xr-x  2 richard  richard  512 Jul 28 15:44 -A
drwxr-xr-x  4 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ cd -- -A
$ ls
$ pwd
/home/richard/-A
$ cd ..
$ rm -rf -- -A
$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..

11

আপনি ফাইলটির সামনে ./ রেখে দিতে পারেন - ফাইল নামটি একটি বিকল্প পতাকা হিসাবে আরএম বা আরএমডিয়ার আচরণ করবে না।

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

আপনি যখন কোনওভাবে মুছে ফেলছেন তখন নামের সামনে ./ রাখার অভ্যাসটি আপনার উচিত - আপনার ডিরেক্টরিতে কোনও -r বা -rf নামক ফাইল আছে কিনা তা আপনি কখনই জানতে পারবেন না। আপনি বলতে পারেন যে আপনার সর্বদা এটি ব্যবহার করা উচিত - তবে আমি দেখতে পেলাম যে ./ আরও প্রাকৃতিক কারণ এটি স্পষ্ট করে দেয় যে "আমি এই ডিরেক্টরিতে ফাইলগুলি মুছতে চাই, * যাই হোক না কেন * বিশ্বব্যাপী যাই হোক না কেন"



2

rmdir এর ভিতরে থাকা কোনও ডিরেক্টরি মুছে ফেলবে না। "আরএম-আরএফ" হবে। rmdir "rm -rf" এর চেয়ে যথেষ্ট নিরাপদ। মুর উত্তর সম্ভবত এখনও সেরা।


1
rm -fr ./-A

উপরের কমান্ডটি আমার পক্ষে কাজ করে।


0

একটি ভিন্ন পদ্ধতি হ'ল ইনোড দ্বারা মুছে ফেলা হবে (এটি কেবলমাত্র আরএম দিয়ে মুছে ফেলা কঠিন এমন অন্যান্য অক্ষরের সাথে ফাইল / ডিরেক্টরিগুলির জন্য কাজ করে)।

bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
5172770 make_hosts.pl
bash-3.2$ find . -inum 5172770 -exec rm -f {} \;
bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
bash-3.2$

আরএমটি এখনও কমান্ডলাইনে একটি -A আর্গুমেন্টটি পাস হবে এবং এটি এখনও বিকল্প হিসাবে ব্যাখ্যা করার চেষ্টা করবে, সুতরাং আপনার এখনও এটি শীর্ষস্থানীয় ড্যাশটি কোনওভাবে দেখা থেকে আটকাতে হবে (ডাবল ড্যাশের মাধ্যমে বা ./ রেখে) নামটির বাকি অংশ
ক্রিস

আপনি যেটি 'থেকে খুঁজে পেয়েছেন তা অনুসন্ধানটি স্বয়ংক্রিয়ভাবে আগে থেকেই যায়। পাস করা ফাইলের নামটি './-A', বা ফাইলটি যাই হোক না কেন ডাকা হবে।
বামগার্ট

নিত: -execনামটি এড়ায় না, প্রয়োজন নেই; exec*সিস্টেমে যে কোনও একটিটির মাধ্যমে প্রেরিত আর্গুমেন্টটির আসল নাম। এটি কেবল শেল ইনপুট যার স্পেশাল সেমিকোলন অ্যাসিস্ট্রিক ইত্যাদির মতো বিশেষ অক্ষরের প্রয়োজন হয় শেলটি সঠিক (উদ্ধৃতি ব্যতীত) পাস করার জন্য উদ্ধৃত হয়। এটি বলেছিল, find -exec rm -f {}কেবল একটি ফাইলের জন্য কাজ করে, এই প্রশ্নটির জন্য বলা ডিরেক্টরি হিসাবে নয়; find -exec rm -rf {}ডিরেক্টরি এবং এমনকি অজানা ডিরেক্টরি পরিচালনা করে তবে এড়িয়ে যাওয়া findএবং করানো rm -rf ./-Aঅনেক সহজ।
dave_thompson_085

0

ডিরেক্টরিটি এইভাবে মুছতে পারে:

find . -type d -iname '-A' -delete

-1

আমি নামের একটি ডিরেক্টরি মুছতে চেষ্টা করছিলাম -p। @ মু-এর উত্তর আমি rm ./-pযা করতে সক্ষম হচ্ছিলাম তা অর্জন করেছিল , যা গুগল অনুসন্ধানের পরে অনেকগুলি ওয়েব পৃষ্ঠায় ব্যাপকভাবে উপলব্ধ।

অন্য পদ্ধতিটি হ'ল ইনোড নম্বরটি ব্যবহার করা। আমি এখানে বর্ণিত পদ্ধতিটি ব্যবহার করেছি:

https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html

সংক্ষেপে, নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:

  1. ফাইল বা ডিরেক্টরি ইনোড নম্বর প্রদর্শন করতে।
ls -il
  1. কোনও ফাইল বা ডিরেক্টরিতে আর্গুমেন্ট ব্যবহার করে findকমান্ডটি ব্যবহার করুন ।-exec rm -irf-exec rm -ifdr
find . -inum <inode-number> -exec rm -irf {} \;
find . -inum <inode-number> -exec rm -irdf {} \;

নিশ্চিত করুন যে আপনি -fপতাকাটির মধ্যে ব্যবহার করেছেন , অন্যথায় বাশ ডিরেক্টরি বা ফাইলটি সন্ধান না করার অভিযোগ করবে।

পরীক্ষিত:

Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

1
এই প্রায় 10 বছর আগে থেকে baumgart এর উত্তর সদৃশ, কিন্তু আপনি প্রয়োজন হবে না rm -dকি এবং সাধারণত না -fযখন থেকে invoking find, কিন্তু আপনি প্রয়োজন -rএকটি ডিরেক্টরির জন্য এবং না কোনো ফাইল এটি প্রয়োজন। সংশোধন করার পরেও এই পদ্ধতিটি এখনও আনাড়ি এবং নিকৃষ্টতম। কোনও অযৌক্তিক ডিরেক্টরি জন্য কেবল এটি করুন rm -fr ./-p- এটি কোনও ডিরেক্টরিতে আর এটি অনুমতি সেটিংসের উপর নির্ভর করে।
dave_thompson_085

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