Làm thế nào để liệt kê các gói từ một ppa / nguồn trong dòng lệnh?


Câu trả lời:


37

Tìm tệp có liên quan khi /var/lib/apt/lists/kết thúc Packagesvà thực hiện lệnh này:

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

Nhân tiện, tôi extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packagestrống rỗng.

BIÊN TẬP

Bạn cũng có thể phân tích apt-cacheđầu ra. Kịch bản này liệt kê tất cả các gói với thông tin máy chủ và repo:

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

Sắp xếp thuận tiện đầu ra bạn có thể nhận được thông tin bạn đang tìm kiếm.


Thật tuyệt, tôi chưa bao giờ nghĩ đến việc phân tích cú pháp các tập tin, tôi đang tìm một cách hay để phân tích đầu ra apt-cache policy '.*'. Các tập tin gói này được lấy từ http://extras.ubuntu.com/ubuntu/dists/natty/main/binary-amd64/, những Packages.*tập tin đó có thể được giải nén bằng cách sử dụng gunziphoặc bunzip2.
Lekensteyn

@Lekensteyn: Tôi đã thêm thông tin phân tích cú pháp đầu ra apt-cache
enzotib

1
Luôn luôn yêu một câu trả lời tốt đẹp awk một lót. Cảm ơn!
TML

8

Tôi sẽ chỉ kiểm tra trực tiếp ở phía máy chủ, như thế:

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

2

Tôi đã tạo ra một kịch bản khủng khiếp cho điều đó:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.