[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:27826] size list of installed packages



佐野@浜松です。

小ネタ 2 つ。

既にありそうな気もしますが、インストールされているパッケージの
サイズをリストするためのスクリプトと、apt のキャッシュに重複した
バージョンがある場合に最新版だけ残して古いものを削除するスクリプトを
作ってみました。(ディスクが不足気味になってきてるので)

まずインストールされているパッケージのサイズをリストするほう。

#!/bin/sh
TMPF=$(tempfile -d /tmp/chk -p pkgsz)
for i in  /var/lib/dpkg/info/*.list;
  do
    N=$(basename $i .list);
    grep-dctrl -e -s Package,Installed-Size -F Package "^$N$" \
     /var/lib/dpkg/status|awk '{printf "%s ", $2; if (NR%2==0) printf "\n"}' \
    >> $TMPF ;
  done
sort -n -k 2 $TMPF
rm -f $TMPF

これだけです。使い方は単にファイルに保存して実行属性を付けて呼び出すだけ。
見ればわかるとおり、オプションなどは何もありません。
自分は chk.packagesize という名前を付けて $HOME/bin に置いてあるので
 chk.packagesize |lv とか chk.packagesize >pkgsiz.list とかして
使ってます。

 (これを使うには grep-dctrl パッケージをインストールする必要があります。)

インストールされているパッケージ数が多いと、完了までに相当の時間を必要と
しますが、最後はサイズの小さい順にソートして表示してくれます。

これを見て、サイズがでかいわりにあまり使っていないものがあったら
削除してすこしでも空き容量をかせごうというセコイことを考えてます ^^;;

もう一方の、apt のキャッシュに重複したバージョンがある場合に最新版だけ
残して古いものを削除するスクリプトですが、これは apt line に stable,
stable-updates, security など複数のラインを記載していると、それぞれの
サーバーに異なるバージョンが存在する間はローカルのキャッシュからも
 apt-get autoclean では消えてくれないので、もったいないなぁという気が
して作りました。

もちろん apt-get clean すればきれいさっぱり全部消えてくれますが、
最新版だけは残しておきないなぁと。

#! /bin/sh
for i in *.deb ;
  do
    if [ ! -f $i ]; then continue; fi
    NAM=`echo $i|sed -e 's/_.*$//'`;
    AVER=`echo $i| sed -e 's/^'$NAM'_//' -e 's/_.*$//'`;

    j=$( ls ${NAM}_*.deb | grep -v $i | head -1 )
    if [ -z $j ]; then continue; fi
    echo "duplicate: "
    echo "  $i"
    echo "  $j"
    
    BVER=`echo $j| sed -e 's/^'$NAM'_//' -e 's/_.*$//'`;

    if dpkg --compare-versions $AVER lt $BVER ;
      then
        echo "will remove" $i 
    
        rm -f $i
      else
        echo "will remove" $j
        rm -f $j
    fi

  done

こんな感じです。こちらは apt のキャッシュディレクトリとして
使っている場所にあらかじめ移動しておいてから実行します。

気分転換のネタでした。

--
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)