¿Cómo puedo obtener una lista de todos los paquetes en una sección del repositorio desde la línea de comandos?

13

En Synaptic, uno puede enumerar paquetes por sección. Por ejemplo, en la imagen a continuación se enumeran todos los paquetes de la sección "Radioaficionados (universo)".

¿Cómo puedo obtener dicha lista (editar: con la descripción del paquete) en la línea de comando?

Necesito una lista cruda; una aplicación de terminal como aptitudeno funcionará.

sináptico

Serge Stroobandt
fuente
shells de búsqueda de apt-cache
Panther
@ bodhi.zazen que es una buena sugerencia, pero no busca solo en la Sección
Steven Penny

Respuestas:

5

Bueno, aunque diga que no desea usar aptitude debido a la salida, debe saber que puede modificarlo para obtener lo que desea:

aptitude -F'|%p|%d|' search '?section(hamradio)'

El truco está en el -Finterruptor que modifica el formato de salida. %psignifica paquete. Esto también se genera cuando el paquete tiene varias arquitecturas (es decir, amd64 frente a i386), y %dque genera la descripción. Puede personalizar aún más el patrón de búsqueda para, por ejemplo, paquetes no instalados:

aptitude -F'|%p|%d|' search '?section(hamradio) !~i'

donde ~isignifica instalado y el !es un no, por lo que se lee como "no (!) instalado (~ i)", o si solo desea los que están disponibles para su arquitectura:

aptitude -F'|%p|%d|' search '?section(hamradio) ~r native'

~rsiendo ?architecture()que coincide con la arquitectura del paquete y nativeque enumera solo los que tienen la misma arquitectura que el sistema, el equivalente a dpkg --print-architecture.

Por lo tanto, la línea anterior se puede escribir de manera más concisa como:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'
Braiam
fuente
Muy elegante, especialmente con -F'|%p|%d|'. Sin embargo, ¿sería posible no enumerar los :i386paquetes agregando una !expresión -expresión a la searchcadena?
Serge Stroobandt
1
@GinGordon sí, solo agregue ~r nativea los términos de búsqueda. ~rsiendo ?architectureque coinciden con la arquitectura del paquete y nativeque enumeran solo las que tienen la misma arquitectura que el sistema, el equivalente a dpkg --print-architecture. Por cierto, ¿quería la lista con la descripción del paquete?
Braiam
¡Excelente! Y sí, he editado la pregunta para incluir la descripción del paquete. Por favor, edite su respuesta en consecuencia y con mérito recibirá el voto de mi mejor respuesta por ser el más conciso.
Serge Stroobandt
@GinGordon échale un vistazo.
Braiam
1
@GinGordon si instala el aptitude-docpaquete y navega /usr/share/doc/aptitude/html/en/index.htmlcon su navegador, encontrará file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmltodas las ventajas desagradables.
Braiam
11

Asegúrese de que el paquete dctrl-toolsInstalar dctrl-tools esté instalado. Proporciona comandos útiles para buscar en las listas de paquetes apt y dpkg. Para obtener una descripción completa de todos los paquetes de una sección particular que se pueden instalar con apt, ejecute

grep-aptavail -F Section hamradio

Esto mostrará los metadatos del paquete completo para cada paquete en la hamradiosección. Si todo lo que quiere ver son los nombres de los paquetes, ejecute

grep-aptavail -n -F Section -s Package hamradio

Si su sistema está configurado para multiarch, el mismo paquete puede aparecer más de una vez en este listado si está construido para más de una arquitectura. Para refinar esto aún más, use

grep-aptavail -n -F Section -s Package hamradio | sort | uniq

o

grep-aptavail -n -F Section -s Package hamradio | sort -u

para ordenar la lista de paquetes y eliminar paquetes duplicados con el mismo nombre.

Tenga en cuenta que deberá utilizar el nombre real de la sección, que es diferente del nombre "legible para humanos" que Synaptic muestra en su GUI. Por ejemplo, las búsquedas anteriores usan el nombre de la sección en hamradiolugar de la cadena "Radioaficionados" que se muestra en Synaptic.

Consulte la página de manual de grep-aptavail para obtener una descripción completa de todas las opciones y algunos ejemplos.

Mike Miller
fuente
3

Más campos en una sola línea, con separador arbitrario

La siguiente línea imprimirá todos los nombres de paquetes únicos de una sección de repositorio, junto con su descripción, cada uno en una sola línea. Todos los campos están separados por un carácter de tubería, es decir, listos para la conversión en una tabla de tuberías Markdown . La tabla resultante se puede encontrar en mi sitio web.

grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u
Serge Stroobandt
fuente
2

Puede usar el siguiente comando para obtener una lista de paquetes que pertenecen a una sección determinada:

$ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}'
bash
bash-completion
busybox-initramfs
busybox-static
dash
zsh
zsh-common
Sylvain Pineau
fuente