নিয়মিত অভিব্যক্তি সহ ফাইলগুলি মুছুন


40

আমি এগুলি শুরু করে 2 নম্বর দিয়ে শেষ হওয়া ফাইলগুলি মুছতে চেষ্টা করেছি কিন্তু এটি কোনও কাজ করে না।
আমি যা চেষ্টা করেছি:

rm ^A*[0..9]2$

আমি কোথায় ভুল করছি?

উত্তর:


56

আপনার মানদণ্ডের সাথে মেলে সমস্ত ফাইল মুছতে আপনি নীচের কমান্ডটি ব্যবহার করতে পারেন:

ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm

কিভাবে এটা কাজ করে:

  1. ls সমস্ত ফাইল তালিকাভুক্ত করে (ফলাফলটি পাইপ হওয়ার পরে একের পর এক)।

  2. grep -P "^A.*[0-9]{2}$" ফাইলগুলির তালিকা ফিল্টার করে এবং কেবল নিয়মিত অভিব্যক্তির সাথে মিলে যায় leaves ^A.*[0-9]{2}$

    • .*যে কোনও সংখ্যক ঘটনার ইঙ্গিত দেয় .যেখানে .কোনও ওয়াইল্ডকার্ড কোনও চরিত্রের সাথে মিলে যায়।

    • [0-9]{2}ঠিক দুটি ঘটনাকে বোঝায় [0-9]যে কোনও অঙ্ক indicates

  3. xargs -d"\n" rm, executes rm lineযে জন্য একবার lineএটি জন্য বাঁশি বাজালাম করা হয়।

আমি কোথায় ভুল করছি?

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

এছাড়াও, আপনার নিয়মিত প্রকাশটি কিছুটা বন্ধ। উদাহরণস্বরূপ, *কোন ঘটনার মানে ...একটি রেগুলার এক্সপ্রেশন, তাই A*ম্যাচ A, AAইত্যাদি এবং এমনকি একটি খালি স্ট্রিং।

আরও তথ্যের জন্য, নিয়মিত- এক্সপ্রেসন.ইন.ফোতে যান


3
ফাইলের নামের জায়গাগুলি থেকে সাবধান থাকুন।
স্লুইট

1
-d"\nসুইচ স্পেস সমস্যা সমাধান করা হয়েছে।
FRG

1
দ্রষ্টব্য - কিছু ডিস্ট্রো (ম্যাক ওএসের মতো) এর একটি grep -P(পার্ল রেজেক্স) নেই। grep -Eএই ক্ষেত্রে কাজ করতে পারে।
bluescrubbie

1
আমি সর্বদা প্রথমে অ-প্রাণঘাতী কমান্ডগুলির সাথে ব্যবহার -Iকরতে xargsএবং সর্বদা পরীক্ষা করতে পছন্দ করি :xargs -d"\n" -I {} echo "{}"
জোজকাইয়্যাক্ক

1
পার্সিং ls? এই নিবন্ধটি নির্দেশ করে যা এই প্রশ্ন দেখুন । সমস্যার কারণে আপনি যা চান না তা করতে পারেন। rm
কামিল ম্যাকিয়েরোভস্কি

45

বা ব্যবহার find:

find your-directory/ -name 'A*[0-9][0-9]' -delete

এই সমাধানটি অদ্ভুত ফাইলের নামগুলি নিয়ে কাজ করবে।


4
এটি একটি দুর্দান্ত সমাধান। আমি এটিকে পছন্দ করি কারণ এটি সহজ এবং আপনি ফাইলগুলি মুছে ফেলার আগে আপনার রেজেেক্সটি সঠিক কিনা তা দেখতে আপনি প্রথমে শেষ-পতাকার পতাকাটি বাদ দিতে পারেন।
জামেস্টোনেকো

1
এছাড়াও আপনি যা মুছবেন তার উপর আপনার আরও নিয়ন্ত্রণ রয়েছে, উদাহরণস্বরূপ যোগ করা-type f
মার্কো সুলা

এটি ফাইল এবং ফোল্ডারগুলি মুছতে ব্যবহার করা যেতে পারে? এটি খালি ফোল্ডারগুলির জন্য কাজ করে না।
অ্যালেক্স

অ্যালেক্স নাপ, ডিরেক্টরিটি অবশ্যই খালি থাকতে হবে (এটি কোনওভাবেই ওপি প্রয়োজনীয়তা ছিল না), আপনি এই xargsপদ্ধতির সাথে ব্যবহার করতে পারেন rm -f
সিউরাস

10

বাশ ম্যান পৃষ্ঠার ফাইল নাম সম্প্রসারণ বিভাগটি দেখুন :

rm A*[0-9][0-9]

আমার জন্য ভাল কাজ।
নিশানথ মাথা

এটি ছিল প্রশ্নের সাদামাটা, তবুও সম্পূর্ণ উত্তর।
জানাক মীনা

ফোল্ডারে প্রচুর ফাইল থাকলে এটি কি কাজ করবে?
Itay

1

রেজিএক্সপক্সের সাথে সমাধানটি 200 গুণ ভাল, এমনকি আপনি দেখতে পাচ্ছেন কোন ফাইলটি মুছে ফেলা হবে কমান্ডটি ব্যবহার করার আগে, চূড়ান্ত পাইপ কেটে ফেলা:

ls | grep -P "^A.*[0-9]{2}$"

তারপরে যদি এটি সঠিক হয় তবে কেবল ব্যবহার করুন:

ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm

এটি 200 গুণ ভাল কারণ আপনি যদি ইউনিক্সের সাথে কাজ করেন তবে গ্রিপ কীভাবে ব্যবহার করবেন তা জেনে রাখা গুরুত্বপূর্ণ। আপনি যদি এটি কীভাবে ব্যবহার করতে জানেন তবে এটি খুব শক্তিশালী।


1
এটি ডেনিসের 4 বছরের পুরানো উত্তরটি ইতিমধ্যে যা বলেছে তার থেকে বেশি যোগ করবে বলে মনে হয় না ।
বিট্রি

1
"২০০ বার" বেশ সুনির্দিষ্ট। প্রচুর অন্যান্য কমান্ড খুব শক্তিশালী, আপনাকে কীভাবে ব্যবহার করতে হয় তা শিখতে হবে।
গ্লেন জ্যাকম্যান


0

find কমান্ড রেজিজেসগুলির সাথেও কাজ করে।

কোন ফাইলগুলি মুছে ফেলা হচ্ছে তা পরীক্ষা করুন

find . -regex '^A.*[0-9]{2}$'

ফাইল মুছে দিন

find . -regex '^A.*[0-9]{2}$' -delete
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.