###############################################################################
# This program do maintenance package tasks
#
# This program is under licence GPL :
# http://www.gnu.org/licenses/gpl.html
#
# This program:
# - Remove orphan packages
# - Remove 'rc' packages (see "dpkg -l" result)
# - Some of 'rc' packages are not empty, so we could remove it let's user
# to delete it manually (package list supplied)
#
# Author: Olivier ALLARD-JACQUIN / http://olivieraj.free.fr/
# Version: 1.1
# Creation date: 2008年09月06日 Last update: 2009年02月16日
###############################################################################
TotalPackageCount() {
LANG=C dpkg -l | \
grep "^[ir][ic]" | \
wc -l
}
PackageCouldBePurgedCount() {
LANG=C dpkg -l | \
grep "^[r][c]" | \
wc -l
}
SelectEmptyPackageToPurge() {
for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do
if [ -n "`LANG=C dpkg -L $I | grep 'does not contain any files'`" ]; then
echo -ne "$I "
fi
done
}
SelectNonEmptyPackageToPurge() {
for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do
echo -ne "$I "
done
}
PurgeOrphanedPackage() {
local Result
echo "+ Looking for orphaned packages..."
IFS=$'\n'
local Orphaned=`deborphan`
unset IFS
if [ -n "$Orphaned" ]; then
echo " - Orphaned packages found ($Orphaned)"
echo -ne " Do you want me to purge orphaned packages ? [Y/n] "
read Result
if [ -z "$Result" ] || [ "$Result" == "Y" ] || [ "$Result" == "y" ]; then
Result=`PackageCouldBePurgedCount`
if [ "$Result" != "0" ]; then
echo " - I've found $Result 'rc' packages, but they are not empty
- If you want, you could maunally purge those package, by using following command :
aptitude purge `SelectNonEmptyPackageToPurge`
- Skipping purge..."
fi
fi
}
MainProgram() {
echo "+ Total installed packages: `TotalPackageCount`"
echo "+ 'rc' packages could be removed: `PackageCouldBePurgedCount`"
PurgeOrphanedPackage
PurgeRcPackage
echo "+ Total installed packages: `TotalPackageCount`"
echo
}
# Main program
MainProgram
La mise en page DLFP casse toute l'indentation, mais le code reste lisible.
Si une action a été faite (purge d'un paquet, etc..), on peut relancer le script afin de voir si il n'y a pas d'autres actions à refaire (par exemple, un nouvel orphelin). Je dois l'améliorer pour intégrer cela dans une boucle, mais ce n'est pas une de mes priorité actuelle.
[^] # Re: Réinstallation plutôt que mise à jour
Posté par Olivier (site web personnel) . En réponse au journal Counter-troll Ubuntu, une fois n'est pas coutume. Évalué à 3.
Aucun problème
#!/bin/bash -norc
###############################################################################
# This program do maintenance package tasks
#
# This program is under licence GPL :
# http://www.gnu.org/licenses/gpl.html
#
# This program:
# - Remove orphan packages
# - Remove 'rc' packages (see "dpkg -l" result)
# - Some of 'rc' packages are not empty, so we could remove it let's user
# to delete it manually (package list supplied)
#
# Author: Olivier ALLARD-JACQUIN / http://olivieraj.free.fr/
# Version: 1.1
# Creation date: 2008年09月06日 Last update: 2009年02月16日
###############################################################################
TotalPackageCount() {
LANG=C dpkg -l | \
grep "^[ir][ic]" | \
wc -l
}
PackageCouldBePurgedCount() {
LANG=C dpkg -l | \
grep "^[r][c]" | \
wc -l
}
SelectEmptyPackageToPurge() {
for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do
if [ -n "`LANG=C dpkg -L $I | grep 'does not contain any files'`" ]; then
echo -ne "$I "
fi
done
}
SelectNonEmptyPackageToPurge() {
for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do
echo -ne "$I "
done
}
PurgeOrphanedPackage() {
local Result
echo "+ Looking for orphaned packages..."
IFS=$'\n'
local Orphaned=`deborphan`
unset IFS
if [ -n "$Orphaned" ]; then
echo " - Orphaned packages found ($Orphaned)"
echo -ne " Do you want me to purge orphaned packages ? [Y/n] "
read Result
if [ -z "$Result" ] || [ "$Result" == "Y" ] || [ "$Result" == "y" ]; then
echo " - Purging orphaned packages... "
aptitude purge $Orphaned
Result="$?"
if [ "$Result" == "0" ]; then
echo " - Purging orphaned packages... OK"
else
echo " - Purging orphaned packages... FAILED"
fi
else
echo " - Skipping orphaned packages purge !"
fi
else
echo " - No orphaned package found"
fi
}
PurgeRcPackage() {
local Result
echo "+ Looking for 'rc' packages..."
local Packages=`SelectEmptyPackageToPurge`
if [ -n "$Packages" ]; then
echo " - 'rc' packages found ($Packages)"
echo -ne " Do you want me to purge 'rc' packages ? [Y/n] "
read Result
if [ -z "$Result" ] || [ "$Result" == "Y" ] || [ "$Result" == "y" ]; then
echo " - Purging 'rc' packages... "
aptitude purge $Packages
Result="$?"
if [ "$Result" == "0" ]; then
echo " - Purging 'rc' packages... OK"
else
echo " - Purging orphaned packages... FAILED"
fi
else
echo " - Skipping 'rc' packages purge !"
fi
else
echo " - No 'rc' package could be deleted"
Result=`PackageCouldBePurgedCount`
if [ "$Result" != "0" ]; then
echo " - I've found $Result 'rc' packages, but they are not empty
- If you want, you could maunally purge those package, by using following command :
aptitude purge `SelectNonEmptyPackageToPurge`
- Skipping purge..."
fi
fi
}
MainProgram() {
echo "+ Total installed packages: `TotalPackageCount`"
echo "+ 'rc' packages could be removed: `PackageCouldBePurgedCount`"
PurgeOrphanedPackage
PurgeRcPackage
echo "+ Total installed packages: `TotalPackageCount`"
echo
}
# Main program
MainProgram
La mise en page DLFP casse toute l'indentation, mais le code reste lisible.
Si une action a été faite (purge d'un paquet, etc..), on peut relancer le script afin de voir si il n'y a pas d'autres actions à refaire (par exemple, un nouvel orphelin). Je dois l'améliorer pour intégrer cela dans une boucle, mais ce n'est pas une de mes priorité actuelle.