ইউনিক্সে একটি ফাইল বাদে সবগুলি কীভাবে মুছবেন? [প্রতিলিপি]


13

সম্ভাব্য সদৃশ:
কোনও ডিরেক্টরি বাদে ডিরেক্টরিতে সমস্ত ফাইল কীভাবে মুছবেন?

ইউনিক্সের এক (বা কিছু) ফাইল বাদে কীভাবে মুছবেন?

কিছুটা এইরকম

 rm -rf -ignore myfile.txt *

উত্তর:


20
ls * | grep -v dont_delete_this_file | xargs rm -rf 

উদাহরণ:

mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5

'টেস্ট 2' ব্যতীত সমস্ত ফাইল সরিয়ে ফেলতে:

ls * | grep -v test2 | xargs rm -rf

তারপরে 'ls' আউটপুটটি হ'ল:

test2

সম্পাদনা করুন:

মন্তব্যের জন্য ধন্যবাদ. ডিরেক্টরিতে স্পেস সহ কিছু ফাইল থাকে:

mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"

আপনি (ব্যাশ সহ) ব্যবহার করতে পারেন:

rm !("test 1"|"test 4")

'ls' আউটপুট:

test 1
test 4

ফাইন্ড ব্যবহার করে খুব অনুরূপ কাজ করতে যাচ্ছিল তবে আপনার কাজ করে এবং আপনি দ্রুত হয়েছিলেন। +1
ররি আলসপ

2
আপনার যদি তাদের নামে স্পেস সহ ফাইল থাকে তবে এটি ব্যর্থ হয়।
মাদুর

ফাঁকা জায়গাগুলির সাথে ফাইলের নামগুলি হ্যান্ডেল করার জন্যls -1 | grep -v do_not_delete | xargs -I files rm "files"
sebhofer

8

ধরে নেওয়া যাক আপনি ব্যাশ শেল (সর্বাধিক সাধারণ কেস) ব্যবহার করছেন, আপনি নেগেটিশন গ্লোব্বিং (পথের নাম সম্প্রসারণ) চিহ্নটি ব্যবহার করতে পারেন:

rm -rf !(myfile.txt)

এটি বর্ধিত গ্লোববিং ব্যবহার করে, তাই আপনাকে প্রথমে এটি সক্ষম করতে হবে:

shopt -s extglob




0

একটি পুনরাবৃত্তির rmজন্য আপনার পুনরাবৃত্তি করতে হবে findএবং যে ফাইল (গুলি) রাখতে চান তা বাদ দিতে হবে (বা grepতবে এটি আপনাকে হোয়াইটস্পেসের সমস্যায় ফেলতে পারে)। শেল গ্লোব জন্য, আধুনিক শেলগুলিতে গ্লোব নিদর্শন রয়েছে যা ফাইলগুলি বাদ দিতে ব্যবহার করা যেতে পারে; এই শেল-স্তরের উল্লিখিত glob পুনরাবৃত্তির সঙ্গে মিলিত হতে পারে যখন উপলব্ধ (যেমন zshরয়েছে rm **/*~foo/bar- দয়া করে মনে রাখবেন এই বিশাল ডিরেক্টরির গাছ জন্য যুক্তি দৈর্ঘ্য সীমা মধ্যে চালানো হতে পারে)।

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