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 на что-то другое, можно посмотреть список пакетов зависящих от чего-то другого.
Тогда уже так:
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
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
на каждый пук вызывать sh -c, который кроме пайпа еще и .bashrc с непойми чем каждый раз обрабатывать будет - ну нафиг.
с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
Ну тогда так:
dpkg --list | awk '/^ii/ {print $2}' | xargs -n 1 -I {} apt-cache depends {} | awk '/^[^ ]/ { pkg=$1 } /: libgtk2.0/{ print pkg }'
Должно быть достаточно эффективно, т.к. множество процессов почти асинхронно и параллельно обрабатывают данные.
Просто не люблю циклы там, где они излишни.
dpkg --list | awk '/^ii/ {print $2}' | xargs -n 1 -I {} apt-cache depends {} | awk '/^[^ ]/ { pkg=$1 } /: libgtk2.0/{ print pkg }'
Должно быть достаточно эффективно, т.к. множество процессов почти асинхронно и параллельно обрабатывают данные.
Просто не люблю циклы там, где они излишни.
Кроме того этот вариант эффективней предложенного в топике, т.к. не спавнит grep -q для каждого прогона цикла, тут процесс awk, который выполняет функцию тела цикла (grep -q libgtk2.0 $p && echo $p), спавнится один раз при запуске команды и живёт пока список не кончится.
на каждый пук вызывать sh -c, который кроме пайпа еще и .bashrc с непойми чем каждый раз обрабатывать будет - ну нафиг.
с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
с aptitude оно, конечно, проще. но я так понимаю - это был просто типовой пример. существует масса задач, требующих подобных обработок, но никак не завязанная на специфику apt/dpkg
и никаких sed-ов или зависимостей от локли