Var / önbellek / apt, her paketin en son sürümlerini bırakacak şekilde nasıl temizlenir

17

Var / önbellek / apt klasörünü, bir paketin son sürümlerini yalnızca birkaç sürümü varsa veya bu programın bir tanesiyse bir paket bırakıyorsa temizlemenin bir yolunu bilmek istiyorum. .

Örneğin birkaç vlc paketim var (vlc_1.1.11, vlc_1.1.12 ..) ve birkaç şarap paketi (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37). ..) ve diğer birçokları.

Öyleyse, bu klasörde yalnızca en son paketleri bırakan bir temizleme nasıl yapılır. Şu anda 2.5GB'm var ve çoğu daha yeni olanlarla daha eski paketler.

    
sordu Luis Alvarado 18.01.2012 18:10

3 cevap

9

Aşağıdaki bash komut dosyasını öneririm

#!/bin/bash

cd /var/cache/apt/archives/
printf '%s\n' *.deb | 
  awk -F_ '{ print  }' |
  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

Çıkış listesinden memnunsanız echo 'sini rm satırından kaldırın.

Ne yapar?

  1. Tüm borç paketi dosyalarını listeler
  2. dosya adındaki her şeyi ilk "_" 'den sonuna kadar kaldırın, paket adını edinin
  3. adları kopyalayın, kopyaları kaldırın
  4. her isim için

    1. zaman adına bu ada sahip paket dosyalarını listeley
    2. listedeki paket dosyalarının sayısını sayın
    3. listede birden fazla paket varsa

      1. listeden ilk ve daha yeni dosyayı kaldırın
      2. diskten bu ada sahip diğer tüm dosyaları kaldırın

Verimlilikte, yalnızca sort ve sort -u arasındaki farktan elde edilen paket adlarına karşılık gelen paket dosyalarını listeleyerek geliştirilebilir.

    
verilen cevap enzotib 18.01.2012 21:48
15

apt-get veya aptitude için autoclean seçeneğini kullanın

sudo apt-get autoclean
sudo aptitude autoclean

Man sayfasından

  

temiz

     

temizle, alınan paket dosyalarının yerel deposunu temizler.   Kilit dosyasını / var / cache / apt / archives / ve / var / cache / apt / archives / partial /.

dosyalarından kaldırır.      

autoclean

     

Temiz, autoclean, alınan paket dosyalarının yerel deposunu temizler. Fark, yalnızca indirilemeyen paket dosyalarını kaldırması ve büyük ölçüde işe yaramaz olmasıdır. Bu, önbellek denetimsiz olarak uzun bir süre korunur.

    
verilen cevap Panther 18.01.2012 18:50
0

Fazladan dosyaları kaldırmayan enzotib’in algoritmasına dayanan daha basit ve daha okunabilir bir bash betiği öneririm. Orijinalin yaptığı gibi:

#! /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
    
verilen cevap Danial Behzadi 17.11.2015 23:01

Etiketlerdeki diğer soruları oku