আপনার ফাইলের নামগুলি ফর্ম্যাটে রয়েছে তা প্রদত্ত file.00064.name.99999.end
, আমাদের প্রথমে আমাদের সংখ্যাটি বাদ দিয়ে সবকিছু ছাঁটাই করতে হবে। এটি করার জন্য আমরা একটি for
লুপ ব্যবহার করব ।
বেস 10 ব্যবহার করার জন্য আমাদের বাশ শেলকেও বলা দরকার, কারণ বাশ পাটিগণিত তাদের 0 টি বেস 8 হিসাবে শুরু করে সংখ্যার সাথে আচরণ করবে, যা আমাদের জন্য জিনিসগুলিকে গোলমাল করবে।
স্ক্রিপ্ট হিসাবে, ফাইল যুক্ত ডিরেক্টরিতে যখন ব্যবহার করা হয়:
#!/bin/bash
for f in ./*
do
if [[ -f "$f" ]]; then
file="${f%.*}"
if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then
rm "$f"
fi
else
echo "$f is not a file, skipping."
fi
done
অথবা আপনি একই কাজটি করতে এই দীর্ঘ কুরুচিপূর্ণ আদেশটি ব্যবহার করতে পারেন:
for f in ./* ; do if [[ -f "$f" ]]; then file="${f%.*}"; if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then rm "$f"; fi; else echo "$f is not a file, skipping."; fi; done
সমস্ত অংশ ব্যাখ্যা করার জন্য:
for f in ./*
বর্তমান ডিরেক্টরিতে প্রতিটি কিছুর জন্য, করুন .... এটি প্রতিটি ফাইল বা ডিরেক্টরিটি ভেরিয়েবল $ এফ হিসাবে সন্ধান করে।
if [[ -f "$f" ]]
খুঁজে পাওয়া আইটেমটি একটি ফাইল কিনা তা যাচাই করে আমরা যদি সেই echo "$f is not...
অংশে না যাই , যার অর্থ আমরা দুর্ঘটনাক্রমে ডিরেক্টরিগুলি মুছতে শুরু করি না।
file="${f%.*}"
ফাইলের নাম হিসাবে শেষের পরে যা আসে তা ছাঁটাই করে ফাইল ফাইল হিসাবে পরিবর্তনশীল সেট করে .
।
if [[ $((10#${file##*.} % 12)) -eq 0 ]]
যেখানে হবে। প্রধান পাটিগণিত কিক ${file##*.}
গত এর আগে সবকিছু ঠিকঠাক ট্রিম .
এক্সটেনশন ছাড়া আমাদের ফাইলের নাম হবে। $(( $num % $num2 ))
মডুলো অপারেশনটি ব্যবহার করার জন্য বাশ পাটিগণিতের বাক্য গঠন, 10#
এটি শুরুতে বাশকে বেস 10 ব্যবহার করতে বলে, যেসব সমস্যাযুক্ত নেতৃস্থানীয় 0s ব্যবহার করে। $((10#${file##*.} % 12))
তারপরে আমাদের 12 -ne 0
টির সাথে ভাগ করে নেওয়া আমাদের ফাইলনাম সংখ্যা বাকী রেখে দেয় leaves বাকীটি শূন্যের সাথে "সমান নয়" কিনা তা পরীক্ষা করে।
- যদি বাকীটি 0 এর সমান না হয়, ফাইলটি
rm
কমান্ডের সাথে মুছে ফেলা হয় , আপনি প্রথমে এটি চালনার rm
সাথে সাথে প্রতিস্থাপন করতে চাইতে echo
পারেন, প্রত্যাশিত ফাইলগুলি মুছে ফেলা হবে কিনা তা পরীক্ষা করতে।
এই সমাধানটি পুনরাবৃত্তিমূলক, এর অর্থ এটি কেবল বর্তমান ডিরেক্টরিতে ফাইলগুলি প্রসেস করবে, এটি কোনও উপ ডিরেক্টরিতে যাবে না।
if
সঙ্গে বিবৃতি echo
কমান্ড ডিরেক্টরি সম্পর্কে সতর্ক সত্যিই প্রয়োজনীয় হিসাবে নয় rm
তে এটি নিজের ব্যাপার ডিরেক্টরি সম্পর্কে অভিযোগ করা হবে, এবং না তাদের মুছে, তাই:
#!/bin/bash
for f in ./*
do
file="${f%.*}"
if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then
rm "$f"
fi
done
অথবা
for f in ./* ; do file="${f%.*}"; if [[ $((10#${file##*.} % 12)) -ne 0 ]]; then rm "$f"; fi; done
সঠিকভাবে কাজ করবে।