Bash脚本用dynamic名称重命名文件夹,并将其replace为内部的string

我刚刚开始使用Docker,而且我是bash脚本中的新手,但现在我需要编写bash脚本来完成下一件事:

  1. 我有一些subdirs 2个目录: Rtp/Rtp-[version]/ ,我需要如果Rtp-[version]/目录存在重命名为Rtp/并覆盖它的内容。 [版本] – 是dynamic号码。

我的目标结构:

 |-- Rtp |--- subdir 1 |--- subdir 2 |-- Rtp-1.0 (or Rtp-1.6, Rtp-2.7) |--- subdir 1 |--- subdir 2 
  1. 在这之后,我需要在新的Rtp/ dir中find特定的文件app.properties ,并在其中更改string: myvar=my value myvar=new value ,然后用3个文件

我试过这个链接: http : //stackoverflow.com/questions/15290186/ …: find . -name 'Rtp-' -exec bash -c 'mv $0 ${0/*/Rtp}' {} \; find . -name 'Rtp-' -exec bash -c 'mv $0 ${0/*/Rtp}' {} \; 如果dir已经存在,它会将一个目录移动到另一个目录中。

另外我想重命名它,而不是复制,因为它是大的目录,它可能需要一些时间来复制。

在此先感谢您,请您解答一下解决scheme,以便将来有所改变的时候我可以改变。

1。

for dir in $(find Rtp-[version] -maxdepth 1 -type d): do cp -Rf $dir Rtp done

  • 在Rtp版本中查找所有目录
  • 遍历所有结果( for...
  • recursion地复制到Rtp /,- -f将被覆盖

2。

for f in $(find Rtp -type f -name "app.properties"): do sed -ie s/myvar=myval/myvar=newval/ $f done

  • find所有名为app.properties的文件
  • 使用sed(Stream编辑器)以-i交互式searchstring(通过正则expression式)并replace它(例如s/<oldval>/<newval>/ )。 请注意,oldval和newval将需要转义。 如果他们包含很多/的,你可以做一些像s|<oldval>|<newval>|

基于@Brian Hazeltine的答案,并检查一个文件是否存在与通配符在shell脚本

我发现下一个解决scheme

 if ls Rtp-*/ 1> /dev/null 2>&1; then mv -T Rtp-*/ Rtp find appl.properties -type f -exec sed -ie 's/myvar=my value/myvar=new value/' {} \; fi