পুনরাবৃত্তভাবে ফাইল এবং ডিরেক্টরিগুলি সরাতে আরএম ব্যবহার করুন


17

অন্যান্য কমান্ড না ব্যবহার করে পুনরাবৃত্তভাবে প্যাটার্নের সাথে মিলিত ফাইল এবং ডিরেক্টরিগুলি সরানোর জন্য আরএম ব্যবহার করা সম্ভব?

উত্তর:


35

আপনার প্রশ্নের সরাসরি উত্তর দিতে, "না - আপনি যা বর্ণনা করেছেন তা করতে পারবেন না rm"।

আপনি করতে পারেন যদিও, আপনার সাথে মেশা না find। আপনি এটি করতে পারেন এমন অনেক উপায়ে এখানে একটি:

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

উদাহরণস্বরূপ, আপনি যদি সমস্ত * ~ ফাইলগুলি নাক করতে চান তবে আপনি এটি করতে পারেন:

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

একটি মন্তব্য থেকে প্রসারিত * :

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm

1
সত্য - আপনি যদি শেষ পাইপটি ছেড়ে যান, তবে আপনি প্রথমে সমস্ত কিছুর একটি তালিকা পেয়ে যাবেন :)
ওয়ারেন

2
পোস্টারের প্রশ্নের সরাসরি উত্তর নাও দিতে পারে তবে তারা যা চায় তার কাছে তারা সবচেয়ে কাছের হবে।
ড্রাকিয়া

1
একটি বামন, অকারণে কিছুটা তিক্ত নয়?
জ্ঞানপি

10
ব্যবহার করে খুব সাবধান হন find | grep | xargs rm। স্পেস (বা নিউলাইনস) সহ যদি ফাইল থাকে তবে এটি ভেঙে যাবে (এবং ফাইলের উপর নির্ভর করে এবং স্পেসগুলি কোথায় রয়েছে) এমন জিনিসগুলি মুছতে পারে যা আপনি মুছতে চাননি। find … -print0 | xargs -0 rmআরও শক্তিশালী হবে। তবে এর অর্থ হ'ল আপনি grepব্যবহার করতে পারবেন না findএবং কেবলমাত্র পছন্দসই ফাইলগুলি মেলে এবং মুদ্রণের জন্য অবশ্যই এর পূর্বাভাসগুলি ব্যবহার করতে হবে । ওয়ারেনের দ্বিতীয় উদাহরণটি আরও দৃust় হবে find -type f -name '*~' -print0 | xargs -0 rm
ক্রিস জনসেন

1
আপনি যদি কাজটি করার জন্য একটি একক কমান্ড চান তবে প্রদত্ত সন্ধানের একটি আদেশ ব্যবহার করে একটি উপাধি তৈরি করুন। ইচ্ছা করলে এর জন্য পরে একটি উত্তর পূরণ করবে।
নৈমিত্তিকের

8

"অন্যান্য আদেশ ব্যবহার না করে"

না।


"প্রাথমিক প্রশ্নের কঠোর উত্তর দিন (সমাধান সরবরাহ করতে সক্ষম না হওয়ার ঝুঁকিতে)" বনাম "একটি সমাধান সরবরাহ করুন, যদিও এটি কার্যকরভাবে বিধিনিষেধের সাথে কঠোরভাবে মেলে না" বিতর্ক বিতর্কটির সাথে উত্তম উত্তর answer
Gnoupi

আমি কেবল এটি পোস্ট করেছিলাম কারণ "একটি বামন" আসলে উত্তরটি সম্পর্কে অভিযোগ করছিল যা আসলে একটি সমাধান সরবরাহ করে। অন্যান্য কমান্ডগুলি ব্যবহার না করে পুনরাবৃত্ত ফাইল মুছে ফেলার কোনও উপায় নেই যা কোনও প্যাটার্নের সাথে মেলে, কেবল বর্তমান ডিরেক্টরি ফাইল / ডিরেক্টরি মুছে ফেলা।
ড্রাকিয়া

3

ব্যাশ, globstarসেট সহ, হ্যাঁ :

rm basedir/**/my*pattern*

আপনার মেলে এমন ফাইলগুলির তালিকা তৈরির ls -1আগে প্রথমে rmএটি ব্যবহার করে দেখুন।

উদাহরণস্বরূপ আপনি বিকল্পগুলি সেট করেছেন shopt -s globstar


বিকল্পভাবে, একটি সংক্ষিপ্ত findরূপ:

find -type f -name 'my*pattern*' -delete

বা জিএনইউর জন্য find:

find -type f -name 'my*pattern*' -exec rm {} +

বা নন-জিএনইউ find( অন্যদিকে কিছুটা ধীর) এর বিকল্প:

find -type f -name 'my*pattern*' -exec rm {} \;

এছাড়াও, ডিরেক্টরি মুছে ফেলুন হিসাবে আপনি জন্য অনুরোধ করতে: শুধু পরিবর্তন rmমধ্যে rm -rউপরে কমান্ড এবং শুধুমাত্র ম্যাচিং লাফালাফি -type fমধ্যে findকমান্ড।


0

আমি "rm -rf" হিসাবে ধরে নিয়েছি যেখানে ফাইলের নাম এবং * এবং? ইত্যাদি (যেমন আজকের_লগ_2009 ????। লগ)। এটি বর্তমান দির থেকে শুরু হয়ে পুনরাবৃত্তভাবে সেই প্যাটার্নটি ম্যাক করা ফাইলগুলি সরিয়ে কাজ করবে।


এটি কাজ করবে না কারণ বর্তমান ডিরেক্টরিতে শেল দ্বারা প্যাটার্নটি প্রসারিত হয়েছে। যদি উদ্ধৃতি দেওয়া হয়, প্যাটার্নটি এতে বিশেষ অক্ষরের একটি ফাইল নাম হয়ে যায়। উদাহরণস্বরূপ ফাইলটি মোছার জন্য [, কেউ rm '[' লিখতে পারে। প্যাটার্নটি কেবল তার অর্থ হারিয়ে ফেলে।
নৈমিত্তিক 18

0

যদি আপনি zsh (1) ব্যবহার setopt extendedglobকরেন তবে .zshrc দিয়ে "বর্ধিত গ্লোববিং" চালু করুন । '** /' দিয়ে প্যাটার্নটির উপসর্গ রেখে পুনরাবৃত্তভাবে মুছে ফেলা হবে:

% আরএম-আরএফ ** / <প্যাটার্ন>

যাইহোক, যদি আছে অনেক ফাইল আপনি অবলম্বন করা উচিত মুছে ফেলতে এটি (1) সঙ্গে xargs (1) আমি করছেন সুপারিশ বা -exec, এবং শেল স্ক্রিপ্ট-এ যে।

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