Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本以使用动态名称重命名文件夹并替换它';里面有细绳_Linux_Bash_Docker_Cmd - Fatal编程技术网

Linux Bash脚本以使用动态名称重命名文件夹并替换它';里面有细绳

Linux Bash脚本以使用动态名称重命名文件夹并替换它';里面有细绳,linux,bash,docker,cmd,Linux,Bash,Docker,Cmd,我刚刚开始使用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 |

我刚刚开始使用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/
    dir中找到特定的文件
    app.properties
    ,并在其中更改字符串:
    myvar=my value
    为string
    myvar=new value
    ,并对另外3个文件执行相同的操作
  • 我尝试了以下链接:…:
    find-名称'Rtp-'-execbash-c'mv$0${0/*/Rtp}'{}\如果目录已经存在,它会将一个目录移动到另一个目录

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

    提前谢谢,请您解释一下解决方案,以便将来如果有什么东西需要更改,我可以更改。

    1

    对于$中的dir(查找Rtp-[version]-maxdepth 1-类型d):do
    cp-Rf$dir Rtp
    完成

    • 在Rtp版本中查找所有目录
    • 迭代所有结果(
      for…
    • 递归复制到Rtp/,并且
      -f
      将覆盖
    二,

    对于美元中的f(查找Rtp-键入f-名称“app.properties”):do
    sed-ie s/myvar=myval/myvar=newval/$f
    完成

    • 查找名为app.properties的所有文件
    • 使用sed(流编辑器)以交互方式
      -i
      -e
    搜索字符串(通过正则表达式)并替换它(例如
    s//
    )。请注意,需要转义oldval和newval。如果它们包含大量的
    /
    ,您可以执行类似
    s | |
    的操作
    基于@Brian Hazeltine的回答和

    我找到了下一个解决方案:

    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
    

    这个网站的目的是帮助你们解决问题,而不是为你们做你们的工作。你已经试过什么了?它是怎么失败的?尝试日志失败?我尝试了此链接::查找-名称'Rtp-'-execbash-c'mv$0${0/*/Rtp}'{}\;问题是,如果目录已经存在,它会在另一个目录中移动一个目录。请将您尝试过的内容移动到Q的正文中,并删除注释。Qs应该是独立的,不需要转到其他链接。我们需要查看目录结构的现有设置以及所需的结构。口头描述几乎总是模棱两可的(就像你的一样),所以我们需要看到一个可以解决的真实用例。在这里发布更多Qs之前,请阅读、、和。祝你好运。看一个“真实”用例的例子,以及如何在你的问题正文中说明它。祝你好运。他想要mv-T,但找不到。谢谢,我会检查它的