我刚刚开始使用Docker,并且是bash脚本的新手,但是现在我需要编写bash脚本来做下一步:
Rtp/
和Rtp-[version]/
,如果Rtp-[version]/
目录存在,我需要将其重命名为Rtp/
并覆盖其内容。 [版本]-是动态数字。 我的目录结构:
|-- Rtp
|--- subdir 1
|--- subdir 2
|-- Rtp-1.0 (or Rtp-1.6, Rtp-2.7)
|--- subdir 1
|--- subdir 2
Rtp/
目录中找到特定文件app.properties
,并在其内部更改字符串:myvar=my value
到字符串myvar=new value
,并对另外3个文件我尝试了此链接:http://stackoverflow.com/questions/15290186/…:
find . -name 'Rtp-' -exec bash -c 'mv $0 ${0/*/Rtp}' {} \;
如果dir已经存在,它将一个目录移动到另一个目录的问题。我也想重命名它而不是复制,因为它的目录很大,复制可能需要一些时间。
在此先感谢您能解释一下解决方案,以便将来如果有什么更改我可以更改。
最佳答案
1。for dir in $(find Rtp-[version] -maxdepth 1 -type d): do cp -Rf $dir Rtpdone
for...
)-f
将覆盖2。
for f in $(find Rtp -type f -name "app.properties"): do sed -ie s/myvar=myval/myvar=newval/ $fdone
-i
-e
搜索一个字符串(通过正则表达式)并替换它(例如s/<oldval>/<newval>/
)。请注意,oldval和newval将需要转义。如果它们包含很多/
,则可以执行类似s|<oldval>|<newval>|
的操作。 关于linux - Bash脚本使用动态名称重命名文件夹并替换其中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46108768/