উত্তর:
পরিবর্তে RM ব্যবহার করে, এটা ব্যবহার করা সহজ হতে পারে খোঁজ । এর মতো একটি কমান্ড হ'ল 'ফাইল' নামের একটি ফাইল বাদে সবকিছু মুছে ফেলবে
find . \! -name 'file' -delete
এর অনেকগুলি সংস্করণ গ্লোব্বিং এবং নিয়মিত এক্সপ্রেশন মেলাকে সমর্থন করতে সক্ষম হওয়া উচিত।
আপনি আরএম-এর পাশাপাশি আউটপুটটি পাইপ করতে পারেন
find . \! -name '*pattern*' -print0 | xargs --null rm
-delete
সেইসাথে করে ফাইলগুলি কি সংরক্ষিত হবে সরানোর -delete
এবং \!
।
find
পুনরাবৃত্তি! ' প্যাটার্ন ' এর সাথে মেলে না এমন সমস্ত ফাইল উপ-ডিরেক্টরিগুলিও মুছে ফেলা হবে
বাশের পরবর্তী সংস্করণগুলিতে extglob
শেল বিকল্প রয়েছে যা আপনাকে যা করতে চান তার একটি বাক্য গঠন দেয় (আপনার ইনস্টলিত সংস্করণটি আছে কিনা তা দেখতে "পাথনাম এক্সপেনশন" এর অধীনে আপনার ম্যান পৃষ্ঠাটি পরীক্ষা করুন):
$ shopt -s extglob # turn on extended globbing
$ rm !(X|Y|Z)
পরীক্ষা করার জন্য, আমি সুপারিশ করছি প্রথম প্রতিস্থাপন rm
সঙ্গে echo
যদি ফাইলের তালিকা মুছে ফেলা হবে কি আপনি আশা করতে কিনা দেখতে।
ls -1 | grep -v "^[XYZ]$" # | xargs rm -r
মনোযোগ দিন: কমান্ডটি চালান এবং যদি ফাইলগুলি মুছতে হয় তবে সঠিকভাবে তা পুনরায় চালনা করুন এবং হ্যাশ অক্ষর মুছুন "#"।
যদি ফাইলের নামগুলি আরও জটিল হয় তবে তা করুন
ls -1 | egrep -v "^file1$|^filename2$|^f1le$" # | xargs rm -r
আবার, ফলাফলগুলি দেখুন এবং তারপরে হ্যাশ চিহ্নটি সরান।
এই সংস্করণ - মন্তব্যে প্রস্তাবিত হিসাবে - কিছু অক্ষর সংরক্ষণ করে এবং আরও পরিষ্কার দেখায়।
ls -1 | egrep -v "^(file1|filename2|f1le)$" # | xargs rm -r
a
, b
এবং a b
প্রথম প্রোগ্রাম মুছে ফেলবে - আপনি, grep অংশে AB করা: "^[ab]$"
a
এবং b
কিন্তু a b
, আপনার উদ্দেশ্য বিরোধিতা। দ্বিতীয় কমান্ড একই কাজ করবে। এবং তৃতীয়ও। খুব, খুব বিরল ব্যতিক্রম সহ আপনার স্ক্রিপ্টগুলিতে 'এলএস' ব্যবহার করা উচিত নয়। শুধু এটা করবেন না।
আপনি যে ফাইলগুলি রাখতে চান তা সরান Move এক স্তর উপরে যান, ফোল্ডার মুছুন। ফোল্ডারটি পুনরায় তৈরি করুন এবং সেই ফাইলগুলি আবার সরিয়ে দিন।
/
, হি? খুব ব্যবহারিক নয়। গ) আপনার সমস্ত ফাইল মুছে ফেলার চেষ্টা করা $HOME
আসলেই বাস্তব নয়।
এটি আমি একটি OSX / MacOS লগআউট হুকের জন্য .sh স্ক্রিপ্ট হিসাবে সেট আপ করেছি, যথেষ্ট ভাল কাজ করে।
#! /bin/bash
for dir in /PathToFolder/*
do
if [ ! "$dir" = "/PathToFolder/FolderToKeep1" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep2" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep3" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep4" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep5" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep6" ] ; then
echo ${dir}
sudo rm -R $dir user
dscl . -delete $dir
fi
done
exit 0
জিএনইউ-ফাইন্ডের সাহায্যে আপনি-ডিলিট স্যুইচটি ব্যবহার করতে পারেন, যা খালি থাকলে ডিরেক্টরিগুলি সরিয়ে দেয়:
find tmp -not -name X -not -name Y -not -name Z -delete
find tmp -maxdepth 1 -not -name X -not -name Y -not -name Z -delete
এটিকে ঘিরে কাজ করার এক উপায়।
tmp
যদি কোন ছিল পাশাপাশি X
/ Y
/ Z
তাতে ফাইল। জিএনইউ'র !
মানক সমতুল্য হিসাবে নোট করুন -not
( -delete
এটিও একটি জিএনইউ এক্সটেনশন)