নামে স্ট্রিং ছাড়াই ফাইলগুলি সরান


9

আমি সেই ফাইলগুলিকে সরাতে চাই যেগুলির নামে '999' ('' ছাড়া) স্ট্রিং নেই।

আমি চেষ্টা করেছি:

grep -vlr 999 . | xargs -0 rm -f --
find . -print0 | grep --null-data -v 999 | xargs -0 rm --

তবে তাদের কোনওটিই কাজ করে না। আমি ম্যাকস সিয়েরা ব্যবহার করছি, ব্যাশ সহ: 3.2.57।


2
grep -lফাইল যেখানে একটি ম্যাচ পাওয়া যায়নি (অথবা সঙ্গে পাওয়া তালিকায় ঘটায় -vমধ্যে) বিষয়বস্তু না ফাইলের নাম। grepআপনার নির্দিষ্ট করা ফাইলগুলির সামগ্রীর সাথে সর্বদা মেলে, তাদের নাম কখনও নয়।
জোল

উত্তর:


18

এতে একটি বর্ধিত গ্লোববিং প্যাটার্ন ব্যবহার করুন bash:

rm ./!(*999*)

এটি shopt -s extglobসক্ষম করতে হবে (এবং সুরক্ষার জন্যও shopt -s failglob, যাতে !(*999*)সমস্ত ফাইলের নাম অন্তর্ভুক্ত থাকে তবে ভুল দ্বারা অস্বাভাবিক নামের কোনও ফাইল মুছে ফেলা হয় না 999)। প্যাটার্নটি !(*999*)বর্তমান ডিরেক্টরিতে যে কোনও নামের সাথে মিলে যাবে those নামগুলি মিলে *999*। লুকানো ফাইলগুলি (ফাইলগুলির নাম যার সাথে একটি বিন্দু দিয়ে শুরু হয় ) মুছে ফেলার জন্য, dotglobবিকল্পটি সক্ষম করুন ।

কেবল নিয়মিত ফাইলগুলি বা নিয়মিত ফাইলগুলির জন্য প্রতীকী লিঙ্কগুলি (ডিরেক্টরি নয় ইত্যাদি) যত্ন নেওয়ার জন্য:

for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done

zshউপরে লুপ করতে শেল সমতুল্য হবে

rm ./(^(*999*))(.)

আপনার প্রথম কমান্ড কাজ করবে না যেহেতু grepফাইলগুলির অভ্যন্তরীণ সন্ধান করবে। এটি সমস্ত ফাইলগুলিকে সরিয়ে ফেলবে যেগুলি বিনা লাইনগুলিতে রয়েছে 999(আপনি যদি --nullবিকল্পটি যুক্ত করেন তবে এটি কাজ করে xargs -0)।

আপনার দ্বিতীয় কমান্ড কাজ করবে না যেহেতু grepম্যাকওএসে সমর্থন করে না --null-data(যদিও এটির --nullবিকল্প রয়েছে তবে কেবলমাত্র ফাইল নাম আউটপুট তৈরি করার জন্য)। এছাড়াও নোট করুন যে এটি কেবল ফাইলের নাম নয়, 999ফাইলের পথে (ডিরেক্টরি উপাদানগুলি সহ) যে কোনও জায়গায় সন্ধান করবে ।


1
আপনি failglobবিকল্পটি সক্ষম করতে চাইবেন বা !(*999*)অন্য কোনও ফাইল নেই যার নাম না থাকলে কল করা ফাইলটি সরিয়ে ফেলতে পারে 999
স্টাফেন চেজেলাস

16

নামের শর্তটি কেবল এতে উল্টে দিন find:

find . -type f \! -name "*999*" 

যোগ -deleteবা -exec rm {} +আসলে মিলেছে ফাইল মুছে ফেলুন করতে।


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