各パッケージの最新バージョンのみを残すようにvar / cache / aptをクリーニングする方法


18

var / cache / aptフォルダーをクリーンアップする方法を知りたいのですが、複数のバージョンがある場合はパッケージの最新バージョンのみを残し、そのプログラムの1つだけであればパッケージを残します。

たとえば、いくつかのvlcパッケージ(vlc_1.1.11、vlc_1.1.12 ..)といくつかのwineパッケージ(wine1.3_1.3.34、wine1.3_1.3.35、wine1.3_1.3.36、wine1.3_1.3.37 ...)がありますこのような多くの他の人。

したがって、このフォルダでクリーンアップを実行して、最新のパッケージのみを残す方法。現時点では2.5GBあり、そのほとんどは古いパッケージと新しいパッケージが混在しています。

回答:


9

私は次のbashスクリプトを提案します

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

出力リストに満足したらechorm行からを削除します。

それは何ですか?

  1. すべてのdebパッケージファイルをリストします
  2. ファイル名の最初"_"から最後までをすべて削除し、パッケージ名を取得します
  3. 名前を並べ替え、重複を削除する
  4. 名前ごとに

    1. その名前に対応するパッケージファイルを時間順にリストします
    2. リスト内のパッケージファイルの数を数える
    3. リストに複数のパッケージがある場合

      1. リストから最初の新しいファイルを削除します
      2. その名前に対応する他のすべてのファイルをディスクから削除します

これは、との差から得た名パッケージに対応する唯一のパッケージファイルをリストすることで、効率を向上させることができたsortとしますsort -u


完璧に機能しました。また、autocleanはビットのクリーンアップにも役立つため、bodhiに+1を付与しています。それで、両方が一緒に素晴らしい仕事をするかもしれません。enzotibに感謝します。
ルイスアルバラード

16

autocleanオプションを使用してapt-getまたはaptitude

sudo apt-get autoclean
sudo aptitude autoclean

マニュアルページから

掃除

cleanは、取得したパッケージファイルのローカルリポジトリをクリアします。ロックファイルを除くすべてを/ var / cache / apt / archives /および/ var / cache / apt / archives / partial /から削除します。

オートクリーニング

cleanと同様に、autocleanは取得したパッケージファイルのローカルリポジトリをクリアします。違いは、ダウンロードできなくなったパッケージファイルのみを削除し、ほとんど役に立たないことです。これにより、制御不能になることなく、キャッシュを長期間にわたって維持できます。


sudo aptitude autocleanを追加できますか。また、両方の場合の自動クリーニング(apt-getおよびaptitude)では、Thunderbird 8.0およびthundebird 9.0のような大きなジャンプをする古いバージョンが残っています。ただし、Thinderbird 8.xの古いパッケージは削除しましたが、9.0が8.0より上であることを考慮せずに、完全なリリースバージョンのままにしておきます。これは、私がまだ残している多くのケースの1つです。この量の古いパッケージに直面する他のアイデアはありますか?
ルイスアルバラード

申し訳ありませんが、autocleanが機能しなかった場合、簡単な方法はわかりません。他の誰かがより良い提案を持っていることを願っています。
パンサー

0

enzotibのアルゴリズムに基づいて、元のファイルのように余分なファイルを削除しない、よりシンプルで人間が読めるbashスクリプトを提案します。

#! /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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.