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あり、そのほとんどは古いパッケージと新しいパッケージが混在しています。
私は次の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
を削除します。
それは何ですか?
"_"
から最後までのファイル名のすべてを削除し、パッケージ名を取得します名前ごとに
リストに複数のパッケージがある場合
sort
とsort -u
の違いから取得したパッケージ名に対応するパッケージファイルのみをリストすることにより、効率を改善できます。
autocleanオプションを使用してapt-getまたはaptitude
Sudo apt-get autoclean
Sudo aptitude autoclean
マニュアルページから
掃除
cleanは、取得したパッケージファイルのローカルリポジトリをクリアします。ロックファイルを除くすべてを/ var/cache/apt/archives /および/ var/cache/apt/archives/partial /から削除します。
オートクリーニング
Cleanと同様に、autocleanは取得したパッケージファイルのローカルリポジトリをクリアします。違いは、ダウンロードできなくなったパッケージファイルのみを削除し、ほとんど役に立たないことです。これにより、制御不能になることなく、キャッシュを長期間にわたって維持できます。
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