web-dev-qa-db-ja.com

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

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あり、そのほとんどは古いパッケージと新しいパッケージが混在しています。

18
Luis Alvarado

私は次の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

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

それは何ですか?

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

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

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

sortsort -uの違いから取得したパッケージ名に対応するパッケージファイルのみをリストすることにより、効率を改善できます。

9
enzotib

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

Sudo apt-get autoclean
Sudo aptitude autoclean

マニュアルページから

掃除

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

オートクリーニング

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

16
Panther

enzotib's アルゴリズムに基づいた、よりシンプルで人間が読める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
0
Danial Behzadi