我刚刚开始使用Docker,并且是bash脚本的新手,但是现在我需要编写bash脚本来做下一步:

  • 我有2个带有一些子目录的dirs: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

  • 在Rtp版本
  • 中查找所有目录
  • 遍历所有结果(for...)
  • 递归复制到Rtp /,并且-f将覆盖

  • 2。
    for f in $(find Rtp -type f -name "app.properties"): do sed -ie s/myvar=myval/myvar=newval/ $fdone
  • 查找所有名为app.properties的文件
  • 使用sed(流编辑器)以交互方式-i -e搜索一个字符串(通过正则表达式)并替换它(例如s/<oldval>/<newval>/)。请注意,oldval和newval将需要转义。如果它们包含很多/,则可以执行类似s|<oldval>|<newval>|的操作。
  • 关于linux - Bash脚本使用动态名称重命名文件夹并替换其中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46108768/

    10-13 09:46