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 -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 कमिट हैश वैल्यू से वापस लौटना आसान है, और इसका मेरे होम सर्वर पर USB में भी बैकअप है, इसलिए मैं इसे निष्पादित करता हूँ (धड़कनें तेज़ हो रही हैं)।
$ ./rmpic.sh
Done
सफलता!
तो, मैंने इसे बिल्ड स्क्रिप्ट में भी शामिल कर दिया है ताकि यह भी निष्पादित हो।
तो, फिर मिलते हैं।
धन्यवाद।