J'ai un fichier texte avec beaucoup de noms de paquets.
package1
package2
# comment
# installing package3 because it was needed for...
package 3
package 4
Comment puis-je installer en masse tous les packages dans le fichier texte sans supprimer les commentaires?
Réponses:
Quelque chose dans ce sens devrait faire l'affaire.
La construction $ (quelque chose) exécute la commande quelque chose , insérant sa sortie dans la ligne de commande.
La commande grep exclura toute ligne commençant par #, en laissant éventuellement un espace avant. Ensuite, la commande tr remplace les nouvelles lignes par des espaces.
la source
tr
échouera avec les séquences de fin de ligne multi-octets (pensez-vous\r\n
), pourquoi ne pas utiliserxargs
?La commande suivante constitue une (légère) amélioration par rapport à l’alternative car elle
sudo apt-get install
n’est pas exécutée lorsque la liste de packages est vide.Notez que l'
-a
option lit les éléments directement à partir d'un fichier au lieu d'une entrée standard. Nous ne voulons pas diriger un fichier dansxargs
parce que stdin doit rester inchangé pour pouvoir être utilisé parapt-get
.la source
xargs
est la bonne façon de faire cela. Trick with<()
is neat.xargs
s'assure queARG_MAX
n'est pas atteint.xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install
, pas "<(
" mais "$(
" et l'option-y
pour apt-get serait une bonne idée.awk
dans un descripteur de fichierxargs -a
à lire. Donc, vous voulez vraiment<(
et pas$(
. Essayez-le et vous verrez ce que je veux dire. Si la commande doit être exécutée sans surveillance et que vous savez déjà exactement ce qui va être installé, alors ils-y
sont corrects.Étant donné un fichier de liste de paquets
package.list
, essayez:la source
Eh bien, voici ma solution pour installer une liste de paquets que j'ai pour la nouvelle installation:
Dans une
bash
fonction:grep
explication:-o
conserve uniquement la partie de la ligne qui correspond à l'expression^[^#]
tout ce qui ne commence pas par un#
[[:alnum]-]*
une séquence de lettres, chiffres et-
la source