2017-09-08 80 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

    相關問題