問題: 2 つのフォルダーがあります (1 つはファイルが更新されるデルタ フォルダーで、もう 1 つは元のファイルが存在するオリジナル フォルダーです)。デルタ フォルダーのファイルが更新されるたびに、元のフォルダーのファイルをデルタ フォルダーの更新されたファイルとマージする必要があります。
注: Delta フォルダーと Original フォルダーのファイル名は一意ですが、ファイルの内容は異なる場合があります。例えば:
$ cat Delta_Folder/1.properties
account.org.com.email=New-Email
account.value.range=True
$ cat Original_Folder/1.properties
account.org.com.email=Old-Email
account.value.range=False
range.list.type=String
currency.country=Sweden
ここで、Delta_Folder/1.properties を Original_Folder/1.properties とマージする必要があるため、更新された Original_Folder/1.properties は次のようになります。
account.org.com.email=New-Email
account.value.range=True
range.list.type=String
currency.country=Sweden
私が選んだ解決策は次のとおりです。
Delta-Folder 内のすべての *.properties ファイルを見つけて、リストを一時ファイル (delta-files.txt) に保存します。
Original-Folder 内のすべての *.properties ファイルを検索し、リストを一時ファイル (original-files.txt) に保存します。
次に、両方のフォルダーで一意のファイルのリストを取得し、それらをループに入れる必要があります。
次に、各ファイルをループして、プロパティ ファイル (1.properties) から各行を読み取る必要があります。
次に、delta-folder のプロパティ ファイルから各行 (delta-line="account.org.com.email=New-Email") を読み取り、その行を区切り記号 "=" で 2 つの文字列変数に分割する必要があります。
(delta-line-string1=account.org.com.email; delta-line-string2=New-Email;)
次に、original-folder のプロパティ ファイルから各行 (orig-line=account.org.com.email=Old-Email) を読み取り、その行を区切り文字「=」で 2 つの文字列変数に分割する必要があります。
(orig-line-string1=account.org.com.email; orig-line-string2=Old-Email;)
if delta-line-string1 == orig-line-string1 then update $orig-line with $delta-line
i.e:
if account.org.com.email == account.org.com.email then replace
account.org.com.email=Old-Email in original folder/1.properties with
account.org.com.email=New-Email
ループがファイル内のすべての行の検索を終了すると、次のファイルに進みます。ループは、フォルダー内のすべての一意のファイルが終了するまで続きます。
ループにはループに使用し、行の分割にはawkを使用し、コンテンツの置換にはsedを使用しました。
すべての行で3つのループに入り、行を分割し、他のファイルで変数を見つけて行を置き換えるため、すべての作業がうまくいき、各ファイルを完了するのに時間がかかります(4分)。
スクリプトがより速く実行されるように、ループを減らす方法があるかどうか疑問に思っています。