¿Cómo enumerar paquetes de un ppa / source en la línea de comando?

Respuestas:

37

Encuentre el archivo relevante al /var/lib/apt/lists/final Packagesy ejecute este comando:

# example for deb http://security.ubuntu.com/ubuntu natty-security multiverse
awk '$1 == "Package:" { print $2 }' /var/lib/apt/lists/security*multiverse*Packages

Por cierto, mi extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packagesestá vacío.

EDITAR

También podría analizar la apt-cachesalida. Este script enumera todos los paquetes con información de servidor y repositorio:

#!/bin/bash

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk '/^[^ ]/    { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; printf("%-40s %-50s %s\n", pkg, $2, $3) }
    /\*\*\*/      { nextline = 1 }'

Ordenando convenientemente la salida, puede obtener la información que está buscando.

enzotib
fuente
Agradable, nunca pensé en analizar realmente los archivos, estaba buscando una buena manera de analizar la salida de apt-cache policy '.*'. Se recupera el archivo de estos paquetes http://extras.ubuntu.com/ubuntu/dists/natty/main/binary-amd64/, esos Packages.*archivos se pueden descomprimir usando gunzipo bunzip2.
Lekensteyn
@Lekensteyn: agregué información de análisis de salida de apt-cache
enzotib
1
Siempre me encanta una buena respuesta de una sola línea. ¡Gracias!
TML
8

Simplemente verificaría directamente en el lado del servidor, así:

$ curl -s http://extras.ubuntu.com/ubuntu/dists/maverick/main/binary-i386/Packages.gz |
  gzip -d | grep Package
Package: news
Package: suspended-sentence
Adam Byrtek
fuente
2

Hice un guión terrible para eso:

#!/bin/bash
clear
##array aufbauen
declare -a repoList=()
for i in $(ls /var/lib/apt/lists/ | grep _Packages)
do
    #echo $i
    repoList=("${repoList[@]}" "$i")
done

repoAnzahl=${#repoList[@]}
echo "Anzahl der Repos: " $repoAnzahl

for ((i=0;$i<$repoAnzahl;i++))
do
    if [[ "${repoList[$i]}" =~ "archive.ubuntu" ]]
    then
    rname=${repoList[$i]##*archive.ubuntu}
    echo "$i RepoName: " "${rname%%_binary*}"
    elif [[ "${repoList[$i]}" =~ "ubuntu" ]]
    then
    echo "$i RepoName: " "${repoList[$i]%%_ubuntu*}"
    else
    echo "$i RepoName: " "${repoList[$i]%%_dist*}"
    fi
done

read -p "Gib die RepoNummer ein: " repoNummer

packages=()
for i in $(cat /var/lib/apt/lists/${repoList[$repoNummer]} | grep Package)
do
    if ! [[ "$i" =~ "Package" ]]
    then
    packages=("${packages[@]}" "$i")
    fi
done

paketAnzahl=${#packages[@]}
echo "Anzahl der pakete: " $paketAnzahl

function listPackages () {
    for ((i=0;$i<$paketAnzahl;i++))
    do
    echo ${packages[$i]}
    done
}

if test $paketAnzahl -gt 20
then
    listPackages | less
else
    listPackages
fi

echo "Anzahl der Pakete: " $paketAnzahl
usuario124640
fuente