Bash脚本用dynamic名称重命名文件夹,并将其replace为内部的string
我刚刚开始使用Docker,而且我是bash脚本中的新手,但现在我需要编写bash脚本来完成下一件事:
- 我有一些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
- 在这之后,我需要在新的
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