Dans mon référentiel local voir ci-dessous, De nombreuses versions des mêmes packages ont été téléchargées et stockées dans le répertoire deb package. Comme Ubuntu préfère toujours utiliser la version la plus récente, je n’ai pas besoin des versions précédentes téléchargées et utilisées. (Tous sont dans le même dossier).
Comment puis-je supprimer les versions antérieures des packages du dossier de mon deb local? Ce n'est pas une solution réalisable pour les supprimer manuellement. (Vous ne pouvez pas examiner les versions dans des milliers de fichiers)
Des idées?!!
Peut-être qu'un script qui vérifie la version de chaque paquet en conservant la version la plus récente et supprime les versions les plus anciennes peut résoudre ce problème.
Je cherche un tel script ou si un logiciel est fondé serait génial
J'ai fait mon dépôt local après ceci comment faire un tutoriel .
*** Un référentiel local est un stockage hors ligne de paquets déjà téléchargés, vous n'avez donc pas besoin de le télécharger à nouveau.
Remarque : Je ne parle pas d'effacer le cache des paquets téléchargés, ce qui peut être fait avec la commande apt-get clean
.
J'ai ensuite supprimé les anciennes versions des mêmes packages. J'ai utilisé l'inversion de la fonctionnalité d'analyse de plusieurs versions de dpkg-scanpackages
.
Première installation du paquet dpkg-dev
Sudo apt-get install dpkg-dev
Générez ensuite un fichier avec le nom des packages (seuls les plus récents seront listés) dpkg-scanpackages
sans l'option -m
. La valeur par défaut est sans l'option -m
.
Si vous avez des fichiers .deb dans un dossier nommé deb, exécutez la commande ci-dessous à partir du parent de ce dossier.
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
Cela créera un fichier avec le nom noms de fichiers qui a tous les noms de fichiers .deb listés dans un format Filename: deb/packagename_version.deb
.
Nous avons maintenant tous les noms de fichiers avec les versions les plus récentes dans un fichier nommé noms de fichiers
La tâche est maintenant simple, modifiez le script pour déplacer tous ces fichiers dans un autre dossier.
Commencez par remplacer le Filename:
par mv
sed -i 's/Filename:/mv/' filenames
Créez maintenant un dossier dans le répertoire parent du dossier deb. Je l'ai nommé le plus récent (sans ordure pourrait être un bon; P).
Modifiez à nouveau le fichier noms de fichiers pour déplacer les fichiers .deb dans le dossier le plus récent récemment créé.
sed -i 's/\.deb/.deb newest/' filenames
Cela fera en sorte que notre fichier noms de fichiers liste la liste des commandes mv
déplaçant les fichiers .deb du répertoire deb vers le répertoire le plus récent
Maintenant, devinez quoi. Exécuter le fichier noms de fichiers
sh filenames
La dernière étape consiste à supprimer le dossier contenant les anciens fichiers .deb obsolètes. Vérifiez le dernier dossier aussi à titre de précaution.
Après avoir installé les packages dpkg-dev
, générez le script de déplacement à l'aide d'une seule commande, utilisez celle-ci en accédant au dossier parent du fichier .deb.
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames
Créez ensuite un dossier nommé le plus récent et exécutez le fichier noms de fichiers avec la commande `sh noms de fichiers *.
J'ai eu le même problème: j'ai créé un référentiel local en utilisant apt-mirror et cet outil télécharge les nouveaux paquets mais laisse tous les anciens paquets en place. J'ai fait ce qui suit pour nettoyer mon miroir local:
Allez à l'emplacement de votre sommet de miroir (le répertoire dans lequel se trouvent les répertoires dists et pool, dans mon répertoire /var/spool/apt-mirror/mirror/ftp.nl.debian.org/debian)
Créez une liste de tous les packages de votre pool:
find pool -type f | sort -u > files
Créez une liste de tous les packages de votre distribution en miroir:
grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
Créez maintenant un diff entre les deux fichiers et convertissez-le en script de nettoyage:
diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
Exécuter le script généré
Assurez-vous de disposer d'autorisations en écriture sur le référentiel (ou exécutez-vous à l'aide de Sudo). Au lieu de supprimer, vous pouvez également déplacer les fichiers vers un emplacement temporaire.
L'idée sous-jacente est que vous pouvez supprimer les fichiers qui ne sont pas mentionnés dans l'un des fichiers Packages, car ils sont remplacés par des versions plus récentes ou sont obsolètes. Si les fichiers ne sont pas mentionnés dans les fichiers Packages, ils ne peuvent pas être trouvés par les clients se connectant à votre référentiel.
cette doublure supprimera uniquement les anciennes versions des mêmes packages
l'exécuter en tant que root
Sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm
"/ var/cache/apt/archives" à remplacer par votre répertoire .deb
cela fonctionne très bien dans Ubuntu 12.10
Belle solution de contournement de "Anwar" (dans la première réponse)! Seule cette ligne je changerais:
sed -i 's/\.deb/.deb newest/' filenames
parce que si vous avez un paquet nommé: packagename.debian_123.deb, votre ligne ne remplacera que le premier ".deb" de cette ligne et cela ressemblera à ceci:
packagename.deb newest_123.deb
Prenez cette ligne à la place, et seul le dernier .deb
de chaque ligne sera remplacé:
sed -i 's/\(.*\).deb/\1.deb newest/' filenames
À Thunar:
/var/cache/apt/archives
Sudo rm /var/cache/apt/archives/customprefix*.deb