আমি নির্দিষ্ট কিছু ফাইল রেখে গিয়ে একটি ডিরেক্টরিতে সমস্ত ফাইল সরিয়ে ফেলতে চাই, নামতে তাদের সাধারণ কিছু নেই। আমি কীভাবে এটি অর্জন করতে পারি?
উদাহরণস্বরূপ, আমি যে ফাইলের নাম রাখতে চাই তা হ'ল:
file_1.png
, another_file.jpg
,some_music.mp3
আমি নির্দিষ্ট কিছু ফাইল রেখে গিয়ে একটি ডিরেক্টরিতে সমস্ত ফাইল সরিয়ে ফেলতে চাই, নামতে তাদের সাধারণ কিছু নেই। আমি কীভাবে এটি অর্জন করতে পারি?
উদাহরণস্বরূপ, আমি যে ফাইলের নাম রাখতে চাই তা হ'ল:
file_1.png
, another_file.jpg
,some_music.mp3
উত্তর:
আপনি যদি ব্যাশ ব্যবহার করছেন:
shopt -s extglob
rm -- !(file1|file2|file3)
প্রথম লাইনটি কেবল প্রসারিত প্যাটার্ন মেলানো সক্রিয় করে এবং এর পরে আমরা তাদের মধ্যে একটি ব্যবহার করি:
!(pattern-list)
প্রদত্ত নিদর্শনগুলির মধ্যে একটি ব্যতীত অন্য কোনওটির সাথে মিলে
এবং প্যাটার্ন-তালিকাটি এক দ্বারা বিভক্ত এক বা একাধিক নিদর্শনগুলির একটি তালিকা |
।
বা সাথে zsh
setopt extendedglob
rm -- ^(file1|file2)
বা, আরও বহনযোগ্য, ব্যবহার করে find
:
find . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -v {} +
একটি সাব-ডাইরেক্টরি তৈরি করুন tmp
, আপনি যে ডিরেক্টরিটি সেই ডিরেক্টরিতে রাখতে চান তার সমস্ত ফাইল সরান এবং rm -f *
তারপরে একটি করুন । এটি tmp
ডিরেক্টরিকে প্রভাবিত করবে না ।
এর পরে ঠিক করুন:
mv tmp/* .
rmdir tmp
(ধরে নিলেন যে আপনি যে ফাইলগুলি সরিয়েছেন তার কোনওোটই ডট দিয়ে শুরু হয় না)।
এটি মাউস এবং নটিলাসের মতো একটি ফাইল ব্রাউজার ব্যবহার করার অর্থ Ctrlঅনুভূত হয়েছে যেখানে আপনি যে কয়েকটি ফাইল রাখতে চান তা ক্লিক করতে পারেন এবং তারপরে মেনুটি ব্যবহার করতে পারেন: Edit -> Invert Selection
অন্যান্য ফাইলগুলি পেতে এবং তারপরে মুছে ফেলার জন্য ।
ls
সংরক্ষণ করতে চান এমন কোনও ফাইল মিস না করে তা দেখতে আপনি চালনা করতে পারেন ।
প্রতি লাইনে একটি করে পাঠ্য ফাইলগুলিতে আপনি যে ফাইলগুলি রাখতে চান সেগুলির নাম যুক্ত করুন। এই ফাইলটি ডিরেক্টরিতে থাকা উচিত নয় বা আপনার নামটিও যুক্ত করা উচিত।
আপনার ডিরেক্টরিটির নাম যদি foo হয় এবং ফাইলটির নাম বার হয় তবে নিম্নলিখিতটি করুন।
find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm
এটি নিম্নলিখিতগুলি করে:
find -type f
foo এবং এর উপ-ডিরেক্টরিগুলিতে সমস্ত ফাইলের নাম অনুসন্ধান করে সেগুলি STDOUT এ মুদ্রণ করে। বিকল্পের সাহায্যে -print0
এটি ফাইলের নামগুলি NUL বাইটের সাথে সীমিত করে।grep -v -f bar
বারে একটি লাইনের সাথে মেলে এমন সমস্ত ফাইলের নাম বাদ দেয় । বিকল্পের সাহায্যে -z
এটি তার -Z
ইনপুটটিকে NUL বাইট দ্বারা নির্ধারিত লাইনের একটি সেট হিসাবে বিবেচনা করে, বিকল্পের সাথে এটি তার আউটপুটটি NUL বাইট দিয়ে সীমানা করে।xargs rm
rm
ফাইলগুলি মুছতে বারবার কল করে। বিকল্পের সাহায্যে -0
এটি এর ইনপুটটিকে NUL বাইট দ্বারা বিসর্জনিত লাইনের একটি সেট হিসাবে গণ্য করে।এটি সাদা স্থানযুক্ত ফাইলের সাথে কাজ করে।
find
আমি বরং করবfind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +
shopt -u extglob
) কীভাবে ফিরিয়ে আনতে হবে তা অন্তর্ভুক্ত করা কার্যকর হতে পারে ।