Var / cache / apt her paketin yalnızca en son sürümlerini bırakacak şekilde nasıl temizlenir


18

Var / cache / apt klasörünü, yalnızca birkaç sürümü varsa bir paketin en son sürümünü bıraktığı veya bu programdan yalnızca biri ise bir paketi bıraktığı şekilde temizlemenin bir yolunu bilmek istiyorum.

Örneğin birkaç vlc paketim (vlc_1.1.11, vlc_1.1.12 ..) ve birkaç şarap paketim (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37 ...) var ve diğerleri bunun gibi.

Yani bu klasörde bir temizleme nasıl yapılır sadece en son paketleri bırakır. Şu anda 2.5GB'ım var ve çoğu yeni olanlarla karıştırılmış eski paketler.

Yanıtlar:


9

Aşağıdaki bash betiğini öneriyorum

#!/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

Çıkış listesinden memnunsanız echo, rmsatırdan çıkarın .

Bu ne yapar?

  1. Tüm deb paketi dosyalarını listeler
  2. "_"paket adını alarak dosya adındaki her şeyi baştan sona kaldırın
  3. isimleri sıralama, kopyaları kaldırma
  4. her isim için

    1. bu ada karşılık gelen paket dosyalarını zaman sırasıyla listeleyin
    2. listedeki paket dosyalarının sayısını say
    3. listede birden fazla paket varsa

      1. listeden ilk ve daha yeni dosyayı kaldır
      2. bu ada karşılık gelen diğer tüm dosyaları diskten kaldır

Yalnızca sortve arasındaki farktan elde edilen paket adlarına karşılık gelen paket dosyaları listelenerek verimlilikte iyileştirilebilir sort -u.


Mükemmel çalıştı. Ayrıca autoclean'ın biraz temizlik yapmasına yardımcı olduğu için bodhi'ye +1 veriyorum. Belki de birlikte harika bir iş çıkarırlar. Teşekkürler enzotib.
Luis Alvarado

16

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

sudo apt-get autoclean
sudo aptitude autoclean

Man sayfasından

temiz

clean, alınan paket dosyalarının yerel deposunu temizler. Kilit dosyası dışında her şeyi / var / cache / apt / archives / ve / var / cache / apt / archives / partial / dizininden kaldırır.

autoclean

Cleanclear gibi, autoclean alınan paket dosyalarının yerel havuzunu temizler. Fark, yalnızca artık indirilemeyen ve büyük ölçüde işe yaramayan paket dosyalarını kaldırmasıdır. Bu, önbelleğin kontrolden çıkmadan uzun bir süre korunmasını sağlar.


Otomatik temizleme sudo yetenek ekleyebilir miyim. Ayrıca her iki durumda da autoclean (apt-get ve aptitude) hala thunderbird 8.0 ve thundebird 9.0 gibi büyük bir sıçrama yapan eski sürümleri bırakıyor. Bununla birlikte, thinderbird 8.x eski paketlerini kaldırmıştır, ancak 9.0'ın 8.0'ın üzerinde olduğu dikkate alınmaksızın tam sürüm sürümleri gibi kalmaktadır. Bu hala bıraktığım birçok durumdan sadece biri. Bu kadar eski paketlerle yüzleşmek için başka fikirleriniz var mı?
Luis Alvarado

Üzgünüm, autoclean işe yaramazsa basit bir yöntem bilmiyorum. Umarım başka birisinin daha iyi bir öneri vardır.
Panther

0

Enzimibib'in algoritmasına dayanan , orijinal gibi ekstra dosyaları kaldırmayan daha basit ve daha insan tarafından okunabilir bir bash betiği öneriyorum :

#! /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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.