Lume-এ অপ্রয়োজনীয় চিত্র ফাইল মুছে ফেলা
হ্যালো, আমি অযোগ্য।
মূলত ওয়ার্ডপ্রেস থেকে স্থানান্তরিত হয়েছি, এবং আমি আমার নিজের তৈরি শেল স্ক্রিপ্ট ব্যবহার করে বিল্ডের সময় webp রূপান্তর করি।
এর ফলে, রূপান্তরের আগের চিত্র ফাইলগুলি অপ্রয়োজনীয় হয়ে পড়ে এবং LumeCMS-এ একটি নিবন্ধ সম্পাদনা করার সময় আপলোড করার চেষ্টা করলে এটি সমস্ত চিত্র ফাইল লোড করার চেষ্টা করে এবং ধীর হয়ে যায়।
যদিও এটি LumeCMS-এর ভবিষ্যতের আপডেটে উন্নত হতে পারে, এই অপ্রয়োজনীয় চিত্র ফাইলগুলি আসলে দরকার নেই, তাই আমি সেগুলি মুছে ফেলতে চাই।
কতটা ফাইলের পার্থক্য আছে
আসুন দেখি বিল্ডের পরে HTML ফাইলের ট্যাগগুলিতে বিদ্যমান চিত্র ফাইল এবং উৎস ফোল্ডারে থাকা চিত্রগুলির মধ্যে পার্থক্য।
বিল্ডের পরে আসলে ব্যবহৃত চিত্র ফাইলগুলি
$ cd Lume-এর বিল্ডের পরের ডিরেক্টরি (যদি html ফাইল থাকে তবে ঠিক আছে)
$ grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | sort -u | wc -l
649
নিশ্চিত করার জন্য, আমি grep -vE ব্যবহার করে ম্যানুয়ালি পরীক্ষা করেছি যে কোনো কিছু বাদ পড়েছে কিনা।
এবং, এই সাইটে আসলে ব্যবহৃত চিত্র ফাইল ছিল 649টি।
যেহেতু বিল্ডের পরে html ফাইলগুলি এক লাইনে আউটপুট হয়, তাই grep করার সুবিধার জন্য আমি ডাবল কোট দ্বারা লাইন ব্রেক করেছি, তারপর এক্সটেন্ডেড রেগুলার এক্সপ্রেশন ব্যবহার করে চিত্র ফাইলগুলি বের করেছি এবং তারপর সেগুলিকে ফরম্যাট করেছি।
বিল্ডের আগে বিদ্যমান চিত্র ফাইলগুলি
$ cd বিল্ডের আগের চিত্র আপলোড ফোল্ডার
$ ls | wc -l
1913
আশ্চর্যজনকভাবে, 1264টি চিত্র ফাইল রয়েছে যা আসলে ব্যবহৃত হচ্ছে না!
※যদি আপনি এটি সঠিকভাবে করতে চান, তবে find ব্যবহার করুন।
আসলে মুছে ফেলা
সুতরাং, আমি grep এবং xargs ব্যবহার করে এই পার্থক্যটি প্রদর্শন করার ব্যবস্থা করেছি।
$ cat rmpic.sh
#!/bin/bash
set -x
RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"
cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | sort -u | awk -F/ '{print $3}')
cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r echo "Junk file: {}"
echo "Done"
set +x
find কমান্ড ব্যবহার করার সময় আমি সবসময় সতর্ক থাকি, তাই যদি এটি মুছে ফেলার জন্য নির্দিষ্ট ডিরেক্টরিতে যেতে না পারে তবে এটি 2 রিটার্ন কোড দিয়ে শেষ হবে।
এখন, আমি echo করা অব্যবহৃত ফাইলগুলি ম্যানুয়ালি grep করেছি এবং বিল্ডের পরের ডিরেক্টরিতে grep -r "file" ব্যবহার করে দ্রুত পরীক্ষা করেছি যাতে নিশ্চিত করা যায় যে সেগুলি ব্যবহার করা হচ্ছে না, তারপর আমি নিম্নলিখিতভাবে এটি সম্পাদনা করে চালিয়েছি।
আমি এটিকে xargs -I {} -r rm {}-এ পরিবর্তন করেছি এবং ডিবাগ মোড সরিয়ে দিয়েছি।
#!/bin/bash
RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"
cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | awk -F/ '{print $3}')
cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r rm {}
echo "Done"
যাইহোক, যেহেতু এটি git দ্বারা পরিচালিত হয়, তাই git reset --hard <commit hash> ব্যবহার করে ফিরে আসা সহজ, এবং এটি আমার হোম সার্ভারের USB-তেও ব্যাকআপ করা আছে, তাই আমি এটি চালাচ্ছি (উত্তেজনা সহ)।
$ ./rmpic.sh
Done
সফল!
সুতরাং, আমি এটি বিল্ড স্ক্রিপ্টে অন্তর্ভুক্ত করেছি যাতে এটিও চালানো হয়।
তাহলে, আবার দেখা হবে।
শুভেচ্ছা।