Eu proponho o seguinte script bash
#!/bin/bash
cd /var/cache/apt/archives/
printf '%s\n' *.deb |
awk -F_ '{ print }' |
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
Remova o echo
da linha rm
se você estiver satisfeito com a lista de saída.
O que isso faz?
- Listar todos os arquivos do pacote deb
- remover tudo no nome do arquivo do primeiro
"_"
para o final, obtendo o nome do pacote - classifique os nomes, removendo duplicatas
-
para cada nome
- listar os arquivos de pacote correspondentes a esse nome na ordem de tempo
- conta o número de arquivos do pacote na lista
-
se houver mais de um pacote na lista
- remova da lista o primeiro e mais recente arquivo
- remova do disco todos os outros arquivos correspondentes a esse nome
Poderia ser melhorado com eficiência, listando apenas os arquivos de pacote correspondentes aos nomes de pacotes obtidos a partir da diferença entre sort
e sort -u
.