【问题标题】:Bash script to append dynamic file path to existing .ini file possibly using sed?Bash脚本将动态文件路径附加到可能使用sed的现有.ini文件?
【发布时间】:2011-02-14 03:48:39
【问题描述】:

我有一个通常命名的 .sqlite 文件,包含在许多唯一用户的主文件夹中,文件结构为:/home/user/unique-ip-address/folder/file.sqlite 我决定移动所有这些 .sqlite 文件到一个 tmpfs 挂载并且已经这样做了维护完整的目录结构,所以每个 .sqlite 文件现在位于:/mnt/tmpfs/home/user/unique-ip-address/folder/file.sqlite

我正在寻找一种方法来编辑每个用户主文件夹中具有唯一文件路径的常用 .ini 文件(例如:/home/user/unique-ip-address/folder/file.ini),我使用 find 和 sed 的图应该可以解决问题,但我不确定查找结果需要如何将用户与 /mnt/tmpfs 中的正确文件夹匹配。我想在 file.ini 中的 dir= 之后将 /dev/shm 中使用的新 .sqlite 位置附加到其主文件夹中的 file.ini 中。谢谢!

【问题讨论】:

  • 这是一次性的还是您想定期进行?换句话说,黑客就足够了,还是你想要一些健壮可靠的东西?

标签: linux bash unix sed find


【解决方案1】:

我相信这样的事情应该可以解决问题:

find /home/*/unique-ip-address/folder/file.ini | xargs -n1 perl -pe 'BEGIN{$infile="/mnt/tmpfs/$ARGV[0]"} {s/dir=/$&$infile/}'

那个命令不会改变任何东西,它只是打印出所有东西。如果它看起来像你想要的那样,只需在最后添加一个 -i.bak ,它就会进行适当的更改。原文件将重命名为 file.ini.bak。

find /home/*/unique-ip-address/folder/file.ini | xargs -n1 perl -pe 'BEGIN{$infile="/mnt/tmpfs/$ARGV[0]"} {s/dir=/$&$infile/} -i.bak'

【讨论】:

  • 感谢您的帮助!稍作修改后效果很好,这只是一个 hack,不需要定期进行。
  • 哦,另外,我想唯一能让它变得更好的方法,以防万一我需要在将来运行它或现在不止一次运行它 sed 是将 database= 行转储到任何现有的改变,所以如果脚本运行两次它会破坏一切。有没有办法让它检查是否已设置 database= 或者每次运行时从 .ini 文件中删除 database= 行并从头开始替换它是否更容易?
  • 假设您的 dir=/database= 行是一行,只需将 s/dir=/ 更改为 s/dir=.*$/ 即可捕获所有内容到行尾。至少我认为你的意思是这样。
猜你喜欢
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多