paket instalasi massal apt-get dari file?


36

Saya memiliki file teks dengan banyak nama paket.

package1
package2

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

package 4

Bagaimana cara saya menginstal secara massal semua paket di dalam file teks tanpa menghapus komentar?


Solusi ini memungkinkan Anda untuk menggunakan komentar: monolune.com/installing-apt-packages-from-a-requirements-file
Flux

Jawaban:


44

Sesuatu di sepanjang garis ini harus melakukan trik.

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

Konstruksi $ (sesuatu) menjalankan perintah something , memasukkan outputnya di baris perintah.

Perintah grep akan mengecualikan setiap baris yang dimulai dengan #, secara opsional memungkinkan untuk spasi putih sebelum itu. Kemudian perintah tr menggantikan baris baru dengan spasi.


4
trakan gagal dengan urutan multi-byte end-of-line (pikirkan \r\n), mengapa Anda tidak menggunakan xargs?
Ivan Anishchuk

11

Perintah berikut ini adalah (sedikit) perbaikan dari alternatif karena sudo apt-get installtidak dijalankan ketika daftar paket kosong.

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

Perhatikan bahwa -aopsi membaca item langsung dari file daripada input standar. Kami tidak ingin mem-pipe file xargskarena stdin harus tetap tidak berubah untuk digunakan oleh apt-get.


xargsadalah cara yang tepat untuk melakukan ini. Trik dengan <()rapi.
Ivan Anishchuk

1
Itu memang solusi yang lebih baik karena xargsmemastikan ARG_MAX tidak tercapai.
phk

Itu harus xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, bukan " <(" tapi " $(" dan opsi -yuntuk apt-get akan menjadi ide yang bagus.

Substitusi proses mengalihkan output awkmenjadi deskriptor file untuk xargs -adibaca. Jadi, Anda pasti ingin <(dan tidak $(. Coba saja dan Anda akan melihat apa yang saya maksud. Jika perintah itu dijalankan tanpa pengawasan dan Anda sudah tahu persis apa yang akan diinstal kemudian yakin, mereka -ymenandai adalah ide yang baik.
Enam

4

Diberikan file daftar paket package.list, coba:

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

0

Nah, inilah solusi saya untuk menginstal daftar paket yang saya miliki untuk instalasi baru:

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

Dalam suatu bashfungsi:

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

grep penjelasan:

  • -o pertahankan hanya bagian garis yang cocok dengan ekspresi
  • ^[^#] apa pun yang tidak dimulai dengan a #
  • [[:alnum]-]* urutan huruf, angka dan -
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.