2017-09-08 82 views
1

我刚刚开始使用Docker,而且我是bash脚本中的新手,但现在我需要编写bash脚本来完成下一件事:Bash脚本用动态名称重命名文件夹并将其替换为

  1. 我有2个迪尔斯一些子目录: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 valuemyvar=new value,并做3个文件
  • 同样的事情,我想这个链接:http://stackoverflow.com/questions/15290186/ ...:find . -name 'Rtp-' -exec bash -c 'mv $0 ${0/*/Rtp}' {} \;钍如果dir已经存在,则将一个目录移动到另一个目录。

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

    在此先感谢您,请您解释一下解决方案,以便我将在未来有所改变。

    +2

    这个网站的目的是解决问题的帮助,但不是在做你的工作适合你。你已经尝试过了什么?它是如何失败的?失败的尝试日志? – metamorphling

    +0

    我试过这个链接:https:// stackoverflow。com/questions/15290186/find-a-pattern-in-files-and-rename-them:find。 -name'* Rtp- *'-exec bash -c'mv $ 0 $ {0/*/Rtp}'{} \;问题是如果dir已经存在,它会在另一个目录中移动一个目录 – Simcha

    +1

    请将您尝试的内容移动到Q的正文中并删除评论。问题应该是独立的,不需要去其他链接。我们需要查看您的目录结构的现有设置以及所需的结构。口头描述几乎总是含糊不清(因为是你的),所以我们需要看到一个可以解决的真实用例。请阅读http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask,http://stackoverflow.com/help/mcve并参加[tour]( http://stackoverflow.com/tour)在发布更多Q​​之前。祝你好运。 – shellter

    回答

    1

    1.

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

    • 通过所有的结果查找RTP版本
    • 迭代所有目录(for...
    • 递归复制到RTP /和-f将覆盖

    2.

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

    • 查找所有名为app.properties
    • 用sed(流编辑器),以-i交互-e搜索字符串(由正则表达式)和更换(如s/<oldval>/<newval>/)。请注意,oldval和newval需要被转义。如果他们包含大量的/'s,您可以执行类似s|<oldval>|<newval>|的操作。
    +0

    谢谢,我会检查它 – Simcha

    相关问题