আমি কীভাবে একটি সাধারণ উপসর্গ এবং প্রত্যয় সহ একাধিক ফাইল সরিয়ে ফেলব?


21

আমার অনেকগুলি ফাইলের নাম রয়েছে

sequence_1_0001.jpg  
sequence_1_0002.jpg  
sequence_1_0003.jpg  
...

এবং ফাইল নামকরণ

sequence_1_0001.hmf  
sequence_1_0002.hmf  
sequence_1_0003.hmf  
...

এবং ফাইল নামকরণ

sequence_2_0001.jpg  
sequence_2_0002.jpg  
sequence_2_0003.jpg  
...

এবং

sequence_2_0001.hmf  
sequence_2_0002.hmf  
sequence_2_0003.hmf  
...

আমি কেবল 'সিকোয়েন্স_1' দিয়ে শুরু হওয়া ফাইলগুলি এবং '.hmf' এ শেষ হওয়া ফাইলগুলি সরাতে চাই, তবে হাজার হাজার ফাইল থাকায় আমি একে একে একে অপসারণ করতে চাই না। আমি কীভাবে আরএম কমান্ডকে উল্লেখ করতে পারি যে প্রিফিলেক্স 'সিকোয়েন্স_1' দিয়ে শুরু হওয়া সমস্তগুলি মুছে ফেলতে এবং '.hmf' এ শেষ করতে চাই?

আমি বর্তমানে একটি রেডহ্যাট লিনাক্স সিস্টেমের সাথে কাজ করছি তবে আমি অন্যান্য ডিস্ট্রিবিউশনেও এটি কীভাবে করব তা জানতে চাই।

উত্তর:


28
rm sequence_1*.hmf

শুরু sequence_1এবং শেষ হওয়া ফাইলগুলি সরান .hmf


গ্লোববিং হ'ল প্রক্রিয়া যেখানে আপনার শেলটি একটি প্যাটার্ন নেয় এবং সেটিকে প্যাটার্নের সাথে মেলে এমন ফাইলের নামের তালিকায় প্রসারিত করে। এটি নিয়মিত প্রকাশের সাথে বিভ্রান্ত করবেন না, যা ভিন্ন। আপনি আপনার সময় অধিকাংশ ব্যয় তাহলে bash, Wooledge উইকি একটি ভাল আছে globbing (পথনাম সম্প্রসারণ) পৃষ্ঠার । আপনি যদি সর্বোচ্চ পোর্টেবিলিটি চান, আপনি প্যাটার্ন ম্যাচিংয়ের পাশাপাশি / পরিবর্তে পসিক্স স্পেকটি পড়তে চাইবেন ।


আপনি "আর্গুমেন্টের তালিকা খুব দীর্ঘ" ত্রুটির সাথে সংঘটিত হওয়ার ক্ষেত্রে আপনি বাশাএফএকিউ 95- তে একবার দেখতে পারেন , যা এটি সম্বোধন করে। সবচেয়ে সহজ কাজটি হ'ল গ্লোব প্যাটার্নটিকে একাধিক ছোট খণ্ডে বিভক্ত করা, যতক্ষণ না ত্রুটিটি সরে যায়। আপনার ক্ষেত্রে, আপনি সম্ভবত 0 টির 9 দ্বারা উপসর্গের সাথে ম্যাচটি বিভাজন করে নিখরচায় পেতে পারেন:

for c in {0..9}; do rm sequence_1_"$c"*.hmf; done
rm sequence_1*.hmf  # catch-all case

এটি 'যুক্তি তালিকার খুব দীর্ঘ' ত্রুটির চারপাশে খুব চালাক কাজ। আমার ক্ষেত্রে, আমার কাছে বিশ হাজার ফাইল রয়েছে, তাই আমি অনুমান করি যে আমাকে 0, .., 20 থেকে লুপের জন্য ব্যবহার করতে হবে। রাইট?
পল

@ পল রাইট, আপনার প্রয়োজন অনুসারে কেবলমাত্র তালিকাগুলি ভাঙ্গা করুন, যদিও এক পর্যায়ে findঅনুমান করা এবং পরীক্ষা করার চেয়ে পদ্ধতির সহজ হয়ে যায়।
jw013

14

যদিও jw013 এর উত্তরটি সঠিক র‌্যাব গ্লোব্বিং, যদিও আপনার হাজার হাজার ম্যাচ থাকলে এই কমান্ডটি ব্যর্থ হতে পারে: rm sequence_1_0001.hmf sequence_1_0002.hmf ...শেল দ্বারা উত্পন্ন প্রসারিত কমান্ড লাইনটি খুব বড় হতে পারে।

ডোমের পরামর্শ অনুসারে, আপনি এই -deleteবিকল্পগুলি এর সাথেও ব্যবহার করতে পারেন find:

find . -maxdepth 1 -type f -name 'sequence_1*.hmf' -delete

উভয় -maxdepthএবং -delete, যদিও পসিক্স স্ট্যান্ডার্ডে নেইfind বন্যের বাস্তবায়নে মোটামুটি সাধারণ । লিনাক্স বিতরণগুলি সাধারণত জিএনইউ ব্যবহার করে find, যা অবশ্যই এই বিকল্পগুলিকে সমর্থন করে।


2
আপনি যদি পারেন তবে সন্ধানের জন্য ডিলিট বিকল্পটি ব্যবহার করুন, এটি প্রতিটি ফাইলের জন্য কাঁটাচামচ করে না ...
ডম

যোগ করা, চিয়ার্স দেখে মনে হচ্ছে -deleteসাম্প্রতিক জিএনইউ এবং বিএসডি সিস্টেমগুলিতে সমর্থিত হওয়া উচিত , যখন -print0কেবল জিএনইউ। সুতরাং এটি সম্ভবত আরও বহনযোগ্য (যদিও এটি অপের পক্ষে কোনও পার্থক্য করা উচিত নয়)।
অপ্রয়োজনীয়

কমপক্ষে ওএস এক্স এর সন্ধানে -প্রিন্ট 0 রয়েছে তবে এটি পসিক্সের অন্তর্ভুক্ত নয়।
ল্রি

5
rm sequence_1_{0000..0999}.hmf
rm sequence_1_{1000..1999}.hmf
rm sequence_1_{2000..2999}.hmf
...

বাশ খুব কাজ করবে।


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