Friday, July 30, 2010

A台有的套件, B台也要

給未來的裕翔

這是一個我很喜歡的實作題

首先, 在A台電腦把所有安裝的套件名稱存檔

rpm -qa -queryformat "%{NAME}" > a-installed.txt

把a-installed.txt複製到B台電腦後

比較優雅的作法是, 把B台也有的套件從名單濾掉
for package in `cat a-installed.txt`
do
rpm -q $package &> /dev/null || echo $package >> b-not-installed.txt
done

先不管指令的回傳值, 上面那個script的意思是

對a-installed.txt的每個套件名稱

測試B本機有沒有, 以rpm -q來測試, 沒有就當false(先不管回傳值)

兩個指令中間是以||區隔

&&檢查到有false就停

||是檢查到有true就停

對那些不存在B本機的套件, 回傳false, 因此就會執行第二道指令

把它們的名稱echo到b-not-installed.txt裡面

那如果B本機本來有存在數個a-installed.txt裡面的套件呢?

在一開始的rpm -q會回傳true, 然後就沒事了~

這樣產生的b-not-installed.txt就是A有B沒有的

接著, yum似乎不能接受stdin來的input

所以可以利用xargs

cat b-not-installed.txt | xargs sudo yum -y install



sudo yum -y install `cat b-not-installed.txt`

似乎後者較好^^

當然啦, 這是比較優雅的作法, 因為少了上面那個bash script

也是無所謂阿, 已經裝過的會自動略過嘛!

No comments:

Post a Comment