apt- 파일에서 대량 설치 패키지를 얻습니까?


36

패키지 이름이 많은 텍스트 파일이 있습니다.

package1
package2

# comment
# installing package3 because it was needed for...
package 3

package 4

주석을 제거하지 않고 텍스트 파일 안에 모든 패키지를 어떻게 대량 설치할 수 있습니까?


이 솔루션을 통해 의견을 사용할 수 있습니다. monolune.com/installing-apt-packages-from-a-requirements-file
Flux

답변:


44

이 라인을 따라 뭔가가 트릭을해야합니다.

apt-get install $(grep -vE "^\s*#" filename  | tr "\n" " ")

$ (something) 구성은 something 명령을 실행하여 출력을 명령 행에 삽입합니다.

grep 명령은 #으로 시작하는 행을 제외하고 선택적으로 앞에 공백을 허용합니다. 그런 다음 tr 명령은 개행을 공백으로 바꿉니다.


4
tr멀티 바이트 줄 끝 시퀀스 (생각 \r\n)로 실패합니다. 왜 사용하지 xargs않습니까?
Ivan Anishchuk

11

다음 명령은 sudo apt-get install패키지 목록이 비어있을 때 실행되지 않기 때문에 대안에 비해 약간 개선되었습니다 .

xargs -a <(awk '! /^ *(#|$)/' "$packagelist") -r -- sudo apt-get install

-a옵션은 표준 입력 대신 파일에서 직접 항목을 읽습니다. xargsstdin은 사용하기 위해 stdin을 변경하지 않아야하기 때문에 파일을 파이프하고 싶지 않습니다 apt-get.


xargs이 작업을 수행하는 올바른 방법입니다. 간계 <()는 깔끔합니다.
Ivan Anishchuk

1
xargs확실히 ARG_MAX 도달하지 않았기 때문에 더 나은 솔루션 입니다.
phk

그것은이어야한다 xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install"아니, <("하지만, " $("및 옵션 -yapt-get을위한 좋은 아이디어가 될 것입니다.

프로세스 대체는 출력 을 읽을 awk파일 디스크립터로 경로 재 지정합니다 xargs -a. 그래서 당신은 분명히 원 <(하고 아닙니다 $(. 그냥 시도하면 내가 무슨 뜻인지 알 수 있습니다. 명령을 무인으로 실행하고 이미 무엇을 설치해야하는지 알고 있다면 -y플래그를 지정하는 것이 좋습니다.
Six

4

패키지 목록 파일이 주어지면 다음을 package.list시도하십시오.

sudo apt-get install $(awk '{print $1'} package.list)

0

글쎄, 다음은 새로 설치하기 위해 가지고있는 패키지 목록을 설치하는 솔루션입니다.

sudo apt install -y $(grep -o ^[^#][[:alnum:]-]* "filename")

A의 bash기능 :

aptif () {
    sudo apt install -y $(grep -o ^[^#][[:alnum:]-]* "$1")
}

grep 설명 :

  • -o 식과 일치하는 줄 부분 만 유지
  • ^[^#] 로 시작하지 않는 것 #
  • [[:alnum]-]* 문자, 숫자 및 -
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.