Jak wyświetlić listę pakietów z ppa / source w wierszu poleceń?

40

Chcę wyświetlić listę wszystkich plików ze źródła, powiedzmy extras.ubuntu.com z wiersza poleceń. Jakie jest na to polecenie?

dpkg --list wyświetla wszystkie pliki lub tylko nazwę pliku.

Ubuntuser
źródło
Bez wymagania CLI: askubuntu.com/questions/5976/...
Ciro Santilli illi 改造 中心 法轮功 六四 事件

Odpowiedzi:

37

Znajdź odpowiedni plik na /var/lib/apt/lists/końcu Packagesi wykonaj następujące polecenie:

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

Nawiasem mówiąc, mój extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packagesjest pusty.

EDYTOWAĆ

Możesz także przeanalizować apt-cachedane wyjściowe. Ten skrypt wyświetla wszystkie pakiety z informacjami o serwerze i repozytorium:

#!/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 }'

Sortując wygodnie dane wyjściowe, możesz uzyskać informacje, których szukasz.

enzotib
źródło
Fajnie, nigdy nie myślałem o parsowaniu plików, szukałem dobrego sposobu na przeanalizowanie danych wyjściowych apt-cache policy '.*'. Plik pakietów jest pobierany http://extras.ubuntu.com/ubuntu/dists/natty/main/binary-amd64/, Packages.*pliki te można rozpakować za pomocą gunziplub bunzip2.
Lekensteyn,
@ Lekensteyn: Dodałem informacje o
analizie
1
Zawsze uwielbiam fajną odpowiedź na jedno linijkę. Dzięki!
TML
8

Chciałbym tylko sprawdzić bezpośrednio po stronie serwera, w ten sposób:

$ 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
źródło
2

Zrobiłem dla tego straszny scenariusz:

#!/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
użytkownik124640
źródło