বাশ ব্যবহার করে কীভাবে সমস্ত লুকানো ফাইল এবং ডিরেক্টরি মুছবেন?


28

সুস্পষ্ট সমাধানটি 1 এর একটি প্রস্থান কোড তৈরি করে:

bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1

একটি সম্ভাব্য সমাধান "এড়ান"। এবং ".." ডিরেক্টরিগুলি কেবল কেবল সেই ফাইলগুলি মুছবে যাগুলির নাম 3 টি অক্ষরের চেয়ে বেশি দীর্ঘ:

bash$ rm -f .??*

আপনি যদি মুছে ফেলতে না পারার বিষয়ে খুব চিন্তিত না হন তবে ভাল। & .. তাহলে কে পাত্তা দেয়? আপনি যদি কোনও স্ক্রিপ্টে কুৎসিত আউটপুট সম্পর্কে উদ্বিগ্ন না হন তবে আমি মনে করি যে সুস্পষ্ট সমাধানটি অন্যেরা খুব খোলামেলাভাবে কম টাইপ করছেন।
ম্যাট

ঠিক তাই আপনি জানেন, .. এবং। ফাইল না। তারা ডিরেক্টরি উল্লেখ। । (কেবলমাত্র একটি মাত্র বিন্দু) হ'ল বর্তমান ডিরেক্টরি এবং .. (দুটি বিন্দু) ডিরেক্টরিটি এক স্তরের উপরে লিঙ্ক। উদাহরণস্বরূপ, যদি সিডি / হোম / ব্যবহারকারী,। / বাড়ি / ব্যবহারকারীর সমান এবং অন্যথায়, আপনি এটি মুছতে পারবেন না। এবং .. (?)
ফুজিয়ান

ম্যাট মন্তব্যের জন্য ধন্যবাদ। আমি প্রায়শই প্রতি কমান্ড প্রস্থান কোড চেকিং (সেট-ই) সহ স্ক্রিপ্টগুলিতে কমান্ডটি ব্যবহার করি। এই ক্ষেত্রে একটি সূচক প্রস্থান কোড প্রয়োজনীয়।
যোনাতন ব্রোজা

অন্তর্নিহিত কিছুই নেই। এবং .. যা তাদের আরএম-আরএফ দিয়ে মুছে ফেলা থেকে রক্ষা করে। এটি কেবলমাত্র আরএম এর আধুনিক পরিবর্তনের সাথে যুক্ত একটি সুরক্ষা ব্যবস্থা।
kubanczyk

এবং সর্বদা rm -rf। * থাকে সত্য যদি আপনি কেবলমাত্র একটি বিবৃতিটির জন্য সেট-আচরণের কাছাকাছি যেতে চান।
ডোমিংগো ইগনাসিও গালডোস

উত্তর:


34
rm -rf। [^।]। ??

সব ক্ষেত্রে ধরা উচিত। । ?? * কেবল 3+ টি অক্ষরের ফাইলনামের সাথে মিলবে (পূর্ববর্তী উত্তরে বর্ণিত),। [^।] দুটি চরিত্রের এন্ট্রি ধরবে (.. ব্যতীত)।


উত্তর করার জন্য ধন্যবাদ! এর উপর ভিত্তি করে আমি "আরএম-আরএফ। [^।] *" এর সংক্ষিপ্ত সংস্করণেও পৌঁছেছি।
যোনাতন ব্রোজা

4
সংক্ষিপ্ত সংস্করণটি সম্পর্কে সতর্কতা অবলম্বন করুন, এটি অনুরূপ, তবে অভিন্ন ফলাফল দেবে না। এটি সামনের দুটি বিন্দুর সাথে নামের সাথে মেলে না (যেমন "... /" যা কখনও কখনও রুটকিটস লুকিয়ে দেখা যায়)
রাসেল হিলিং

এবং পিডাব্লুডি চেক করতে সতর্কতা অবলম্বন করুন বা আপনার সমস্ত সেটিংস আলগা করুন :)
kommradHomer

এটি কাজ করে বলে মনে হচ্ছে না zsh। কোন পরামর্শ?
ryanjdillon

সঙ্গে zshডিফল্টরূপে একটি খালি ওয়াইল্ডকার্ড ম্যাচ একটি ত্রুটি হিসাবে গণ্য করা হয়; যদিও bashএটির সাথে সহজেই অপরিবর্তিত হয়। zshএকইভাবে আচরণ করতে আপনি কমান্ডটি ব্যবহার করতে পারেনunsetopt nomatch
রাসেল হিলিং

1
find -path './.*' -delete

এটি বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের সাথে মেলে যা একটি দিয়ে শুরু হয় .এবং এগুলি পুনরাবৃত্তভাবে মুছে দেয়। গোপন নন ডিরেক্টরিতে লুকানো ফাইলগুলি স্পর্শ করা হয় না।

আপনি যদি সত্যিই কোনও ডিরেক্টরি থেকে সমস্ত কিছু মুছতে চেয়েছিলেন find -deleteতবে যথেষ্ট হবে।


এটি সমস্ত কিছু মুছে ফেলবে, কেবল সেইসব এন্ট্রিগুলি নয়.
ক্যাস্পারড

ওহ, মনে হচ্ছে আমি "লুকানো ফাইলগুলি সহ সমস্ত কিছু মুছুন" হিসাবে প্রশ্নটি ভুলভাবে পড়েছি ... ঠিক আছে, আমার খারাপ।
ফ্রিটজ

@ ক্যাস্পারড ধন্যবাদ, এখন আসলে প্রশ্নের উত্তর দেওয়া উচিত।
ফ্রিটজ

0

সবচেয়ে ভাল উপায় সম্ভবত:

  • খুঁজে। -নাম। * -ম্যাক্সডেপথ 1 -প্রকার এফ-এক্সেক আরএম {} \;

আরএমএসকে এলএস-এল- তে পরিবর্তন করুন যদি আপনি কেবল কী মুছে ফেলা হয় তা দেখতে চান, আউটপুটটি ভার্বোজ করতে আপনি আরএম -v বিকল্পটি যুক্ত করতে চাইতে পারেন

  • টাইপ চ অপশন বলে খোঁজ কমান্ড ফাইল কেবল দেখুন (ফেরত dirs, লিঙ্ক ইত্যাদি)
  • -maxdepth 1 বলে খুঁজে সাবডিরেক্টরি থেকে ঢলা না

গীত। '\' শেষ করার কথা ভুলে যাবেন না;


1
সাবধান হন! আপনার অর্থ -'নাম '। *' বা-নাম। * অন্যথায় আপনি টেনে আনবেন। এবং .. আবার যাই হোক।
ডোমিংগো ইগনাসিও গ্যালডোস

-1
ls -la | awk '$NF ~ /^\.[^.]+/  {print $NF}' | xargs rm -rf

ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~   ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +

If the last field $NF match pattern show it and send 
it to xargs which will perform the task.

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