명령 줄에 ppa / source에서 패키지를 나열하는 방법은 무엇입니까?


답변:


37

/var/lib/apt/lists/끝나는 관련 파일을 찾아 Packages다음 명령을 수행하십시오.

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

그건 그렇고, 나는 extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages비어 있습니다.

편집하다

apt-cache출력 을 구문 분석 할 수도 있습니다 . 이 스크립트는 서버 및 저장소 정보가있는 모든 패키지를 나열합니다.

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

출력을 편리하게 정렬하면 원하는 정보를 얻을 수 있습니다.


니스, 실제로 파일을 구문 분석하는 것을 생각한 적이 없으며의 출력을 구문 분석하는 좋은 방법을 찾고있었습니다 apt-cache policy '.*'. 이 패키지 파일은에서 검색되며 또는을 사용하여 http://extras.ubuntu.com/ubuntu/dists/natty/main/binary-amd64/해당 Packages.*파일을 압축 해제 할 수 있습니다 . gunzipbunzip2
Lekensteyn

@ Lekensteyn : apt-cache 출력 구문 분석 정보를 추가했습니다
enzotib

1
항상 좋은 awk one-liner 답변을 좋아하십시오. 감사!
TML

8

서버 측에서 직접 확인하십시오.

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

2

나는 그것을 위해 끔찍한 스크립트를 만들었습니다.

#!/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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.