06.06.2011 01:59

ascrazyСписок пакетов зависимых от GTK2 [Debian]

Возник такой вопрос в нашей jabber-конференции. По-быстрому написал однострочник на bash.
1
for i in `dpkg --list | sed -e '1,7d' | grep ^ii | sed -re 's/\S{2}[^\s]{2}(\S*).*/\1/'`; do echo `apt-cache depends $i` | grep 'Зависит: libgtk2.0' | sed -re 's/(\S*)[^\n]*/\1/'; done


Писал под дебианом, но должно работать везде где dpkg/apt для управления пакетами.
Если у вас не русифицированный дистр, то в скрипте 'Зависит: libgtk2.0' нужно заменить на что-нибудь вроде 'Depends: libgtk2.0', точно не знаю на что, лучше проверить apt-cache depends libgtk2.0-bin.
Соответственно заменив libgtk2.0 на что-то другое, можно посмотреть список пакетов зависящих от чего-то другого.


Тэги: bash debian sed зависимости скрипты
+ 1 -
Похожие Поделиться

ananas 06.06.2011 11:57 #
1
for p in `dpkg --list | awk '/^ii/ {print $2}'`; do apt-cache depends $p | grep -q 'libgtk2.0' && echo $p; done


и никаких sed-ов или зависимостей от локли
kstep 06.06.2011 12:25 #
Тогда уже так:

dpkg --list | awk '/^ii/ {print $2}' | xargs -n 1 -I {} sh -c "apt-cache depends {} | grep -q 'libgtk2.0' && echo {}"

или вообще почитайте /usr/share/doc/aptitude/README и не мучайте клавиатуру:

aptitude search ~i~Dlibgtk2.0
ananas 06.06.2011 12:36 #
на каждый пук вызывать sh -c, который кроме пайпа еще и .bashrc с непойми чем каждый раз обрабатывать будет - ну нафиг.

с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
kstep 06.06.2011 12:51 #
Ну тогда так:

dpkg --list | awk '/^ii/ {print $2}' | xargs -n 1 -I {} apt-cache depends {} | awk '/^[^ ]/ { pkg=$1 } /: libgtk2.0/{ print pkg }'

Должно быть достаточно эффективно, т.к. множество процессов почти асинхронно и параллельно обрабатывают данные.

Просто не люблю циклы там, где они излишни.
kstep 06.06.2011 12:55 #
Кроме того этот вариант эффективней предложенного в топике, т.к. не спавнит grep -q для каждого прогона цикла, тут процесс awk, который выполняет функцию тела цикла (grep -q libgtk2.0 $p && echo $p), спавнится один раз при запуске команды и живёт пока список не кончится.
philosoft 19.06.2011 00:53 #
Ещё -F %p добавить
ananas 06.06.2011 12:36 #
на каждый пук вызывать sh -c, который кроме пайпа еще и .bashrc с непойми чем каждый раз обрабатывать будет - ну нафиг.

с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
K900 06.06.2011 15:40 #
Fedora: rpm -q --whatrequires gtk2
Arch: pacman -Qi gtk2
Agilia: mpkg-whodepend gtk+2
Debian: dpkg --list | awk '/^ii/ {print $2}' | xargs -n 1 -I {} apt-cache depends {} | awk '/^[^ ]/ { pkg=$1 } /: libgtk2.0/{ print pkg }'

Вывод: закапывайте apt-*, юзайте aptitude.