Var / cache / apt को इस तरह से कैसे साफ़ करें कि यह प्रत्येक पैकेज के नवीनतम संस्करण को छोड़ दे


18

मैं var / cache / apt फ़ोल्डर को इस तरह से साफ करने का तरीका जानना चाहता हूं कि यह पैकेज के नवीनतम संस्करण को छोड़ता है यदि इसके कई संस्करण हैं या यह एक पैकेज छोड़ता है यदि यह उस प्रोग्राम का एकमात्र है।

उदाहरण के लिए मेरे पास कई vlc संकुल हैं (vlc_1.1.11, vlc_1.1.12 ..) और कई शराब पैकेज (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1_1_1.3.37 ...) और कई अन्य इसे पसंद करते हैं।

तो इस फ़ोल्डर में एक सफाई कैसे करें कि यह केवल नवीनतम पैकेज छोड़ता है। फिलहाल मेरे पास 2.5GB है और इसमें से ज्यादातर पुराने पैकेज हैं जो नए के साथ मिश्रित हैं।

जवाबों:


9

मैं निम्नलिखित बैश स्क्रिप्ट का प्रस्ताव करता हूं

#!/bin/bash

cd /var/cache/apt/archives/
printf '%s\n' *.deb | 
  awk -F_ '{ print $1 }' |
  sort -u | 
  while read pkg; do 
    pkg_files=($(ls -t "$pkg"_*.deb))
    nr=${#pkg_files[@]}
    if ((nr > 1)); then
      unset pkg_files[0]
      echo rm "${pkg_files[@]}"
    fi
  done

यदि आप आउटपुट सूची से संतुष्ट हैं तो लाइन echoसे हटा दें rm

यह क्या करता है?

  1. यह सभी डिब पैकेज फाइलों को सूचीबद्ध करता है
  2. पहले "_"से अंत तक फ़ाइल नाम में सब कुछ हटा दें , पैकेज नाम प्राप्त करना
  3. डुप्लिकेट को हटाते हुए नामों को क्रमबद्ध करें
  4. प्रत्येक नाम के लिए

    1. समय क्रम में उस नाम के अनुरूप पैकेज फ़ाइलों को सूचीबद्ध करें
    2. सूची में पैकेज फ़ाइलों की संख्या की गणना करें
    3. यदि सूची में एक से अधिक पैकेज है

      1. पहली और नई फ़ाइल को सूची से हटा दें
      2. उस नाम से संबंधित अन्य सभी फाइलों को डिस्क से हटा दें

इसे दक्षता में सुधार किया जा सकता है, केवल संकुल फाइलों को सूचीबद्ध करके संकुल नामों के बीच अंतर से प्राप्त पैकेज नाम sortऔर sort -u


इसने पूरी तरह से काम किया। मैं बॉडी को +1 भी दे रहा हूं क्योंकि ऑटोक्लेन ने थोड़ी सफाई करने में भी मदद की है। तो शायद दोनों मिलकर एक बड़ा काम करें। धन्यवाद enzotib
लुइस अल्वाराडो

16

apt-get या aptitude के लिए आटोक्लाइन विकल्प का उपयोग करें

sudo apt-get autoclean
sudo aptitude autoclean

मैन पेज से

स्वच्छ

साफ पुनर्प्राप्त पैकेज फ़ाइलों के स्थानीय भंडार को साफ करता है। यह सब कुछ हटा देता है लेकिन लॉक फ़ाइल / var / cache / apt / अभिलेखागार / और / var / cache / apt / अभिलेखागार / आंशिक / से।

स्वतः स्वच्छ

स्वच्छ की तरह, आटोक्लाइन पुनः प्राप्त पैकेज फ़ाइलों के स्थानीय भंडार को साफ करता है। अंतर यह है कि यह केवल उन पैकेज फ़ाइलों को हटा देता है जिन्हें अब डाउनलोड नहीं किया जा सकता है, और बड़े पैमाने पर बेकार हैं। यह एक कैश को लंबे समय तक बनाए रखने की अनुमति देता है जब तक कि यह नियंत्रण से बाहर न हो जाए।


क्या आप सुडोल एप्टीट्यूड आटोक्लीन जोड़ सकते हैं। इसके अलावा दोनों मामलों में आटोक्लेयन (एप्ट-गेट और एप्टीट्यूड) अभी भी पुराने संस्करणों को छोड़ देता है जो थंडरबर्ड 8.0 और थंडरबर्ड 9.0 जैसी बड़ी छलांग लगाते हैं। हालाँकि इसने थंडरबर्ड 8.x पुराने पैकेज को हटा दिया था लेकिन यह पूर्ण रिलीज के संस्करणों की तरह बिना ध्यान दिए निकल जाता है कि 9.0 8.0 से ऊपर है। यह कई मामलों में से एक है जिसे मैंने अभी भी छोड़ दिया है। पुराने पैकेज की इस राशि का सामना करने के लिए कोई अन्य विचार?
लुइस अल्वाराडो

मुझे खेद है, अगर आटोक्लेन ने काम नहीं किया तो मुझे एक सरल विधि के बारे में नहीं पता। आशा है कि किसी और के पास बेहतर सुझाव होगा।
पैंथर

0

मैं एक सरल और अधिक मानव पठनीय बैश स्क्रिप्ट का प्रस्ताव करता हूं , जो कि एनज़ोटिब के एल्गोरिथ्म पर आधारित है, जो मूल फ़ाइल की तरह अतिरिक्त फ़ाइलों को नहीं हटाता है:

#! /usr/bin/env bash

cd /var/cache/apt/archives/
for pkg in `ls *.deb | cut -d _ -f 1 | sort -u`; do
    if [ $(ls $pkg\_* | wc -l) -gt 1 ]; then
        files=$(ls -vr $pkg\_*)
        rmfiles=`echo $files | cut -d " " -f 2-`
        rm -v $rmfiles
    fi
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.