rpm アップグレード用のプロパティファイル (sed/awk/comm/diff) マージ用のシェルスクリプト

rpm アップグレード用のプロパティファイル (sed/awk/comm/diff) マージ用のシェルスクリプト

rpmを介してインストールされるJava製品を開発しています。ユーザーが編集できる構成ファイルのセットがあります。これらの設定ファイルは、次の形式のJavaプロパティファイルです。

com.acme.pkg1.setting=something customized 1
com.acme.pkg2.setting=something original 2

これらのファイルはSPECファイルに%config(noreplace)としてマークされているため、アップグレード後に横に.rpmnewファイルを持つことができます。

com.acme.pkg1.setting=something original 1
com.acme.pkg2.setting=something original 2
com.acme.pkg3.setting=something original 3

元のファイルに新しいキーのみを追加する方法でこれらのファイルをマージする方法はありますか?

私の意見は次のとおりです。

  1. フィルターキー
  2. キーソート
  3. comm(1) を使用します。例: comm -23 file.rpmnew.keys file.keys > new.keys
  4. file.rpmnewからnew.keysと一致するキー=値を抽出する
  5. ソースファイルに結果を追加する

rpmのアップデート後にスクリプトを使用してこれをどのように達成できますか?

標準のLinuxユーティリティ(comm、diff、sed、awk、grep ...)を使用する方が良いですか?

ベストアンサー1

  • 設定なしで生の生と生の目標値を設定します。

    sed "s/=.*//g" file_original.ini > file_original.raw
    sed "s/=.*//g" file_target.ini > file_target.raw
    
  • 私の考えでは、ターゲットが元のターゲットよりも多くのオプションを持つことになると思います。違いを作る:

    grep -vf original.raw target.raw > newvals.dat
    
  • 新しい価値を追加します。

    cp -p file_original.ini file_original.ini.rpmsave
    grep -f newvals.dat file_target.ini >>file_original.ini
    

これが基本的なアイデアです。多くのエラー処理、クリーンな一時ファイルの生成、クリーンアップが必要です。

おすすめ記事