모든 MATE 패키지를 설치하고 싶습니다.
$ sudo apt-get install '^mate'
그러나 너무 많은 패키지를 선택하고 일부 패키지가 설치된 일부 패키지와 충돌합니다.
이제 나는 그들을 제외하고 싶습니다. 어떤 아이디어가 있나요?
당연히 이것은 작동하지 않습니다.
$ sudo apt-get install '^mate && !-dev'
또는 단순히 apt-get이 충돌하는 패키지를 무시하도록 할 수 있습니까?
답변1
정규식만 에 인수로 전달할 수 있습니다 apt-get install
.
원하는 작업을 수행하는 정규식을 만들 수 있지만 지루합니다. 정규식의 부정은 정규식을 사용하여 표현할 수 있지만 2의 보수 정규식의 크기는 일반적으로 원래 정규식의 크기에 따라 기하급수적으로 커집니다.
apt-get install '^mate(.?.?.?|.*([^v]|[^e]v|[^d]ev|[^-]dev))$'
Aptitude의 검색 모드를 사용하여 어느 정도 적합한 구문으로 패키지 목록을 생성하고 결과 목록을 apt-get install
또는 에 전달할 수 있습니다 aptitude install
.
aptitude search '^mate !-dev$'
답변2
다음과 같이 시도해 볼 수 있습니다.
list="" ; for pkg in $(apt-cache search ^mate | grep -v -- '-dev'); list="$list $pkg" ; done ; sudo apt-get install $list
답변3
제가 직접 이런 질문을 한 적이 있습니다. 부정적인 예측을 시도했지만 apt-get은 이를 이해하지 못합니다. 그래서 동일한 결과를 보관할 수 있는 다른 방법을 찾다가 여기에서 답을 찾았습니다. 그럼에도 불구하고 선택한 솔루션은 grep을 사용하므로 미리보기를 사용하고 호출 측면에서 검색 표현을 훨씬 더 단축할 수 있습니다.
apt-cache search '^mate' | grep -P '^mate(?!.*dbg)(?!.*dev).*'
Mates 패키지(예: atril)에는 mate로 시작하는 이름이 없습니다. 그들은 그것을 전혀 포함하지도 않습니다.