问题:我有两个文件夹(一个是 Delta 文件夹 - 文件更新的地方,另一个是原始文件夹 - 原始文件存在的地方)。每次 Delta 文件夹中的文件更新时,我都需要将原始文件夹中的文件与 Delta 文件夹中的更新文件合并。
注意:虽然 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"),并将带有分隔符“=”的行拆分为两个字符串变量。
(delta-line-string1=account.org.com.email;delta-line-string2=New-Email;)
然后我需要从原始文件夹的属性文件中读取每一行(orig-line=account.org.com.email=Old-Email 并用分隔符“=”将行拆分为两个字符串变量。
(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
一旦循环完成查找文件中的所有行,它就会转到下一个文件。循环继续,直到完成文件夹中的所有唯一文件。
对于循环,我使用for循环,对于分割线,我使用awk,而对于替换内容,我使用sed。
总的来说,它的工作正常,它需要更多的时间(4 分钟)来完成每个文件,因为它为每一行进入三个循环并拆分该行并在其他文件中查找变量并替换该行。
想知道是否有任何方法可以减少循环,以便脚本执行得更快。