替換專案中的包名

壹頁書發表於2019-03-20

專案已經做完了,但是包名字首不符合公司規範.

專案中所有的類似  package com.sqi.opb.admin  的包名,引用

都要從 com.sqi 替換為 com.bj


這個首先需要替換所有的java檔案,pom檔案和yml配置檔案裡面的內容

然後批量移動資料夾 


實現 很簡單 linux 兩行命令


sed -i "s/com.sqi/com.bj/g" `grep com.sqi -rl /cygdrive/d/opb/ | grep  ".java\|.pom\|.yml\|.kt"`
find /cygdrive/d/opb/  -path "*src/*/sqi" -type d  -exec bash -c 'p=$(echo "{}"); target=$(echo "{}" | sed "s/sqi/bj/g");mv $p $target;' \;



我在windows上安裝的cygwin工具 專案目錄是/cygdrive/d/opb


首先看第一行命令的 grep部分

grep com.sqi -rl /cygdrive/d/opb/ | grep  ".java\|.pom\|.yml"

他的結果如下


他遍歷   /cygdrive/d/opb/  下所有的子目錄下的所有檔案, 如果包含  “ com.sqi ”的內容 並且檔案字尾名是 .java .pom .yml .kt則顯示檔名


sed -i "s/com.sqi/com.bj/g" 然後通過 sed -i 在原檔案直接進行替換, 將 com.sqi替換為 com.bj



第二步 批量移動目錄

find /cygdrive/d/opb/  -path "*src/*/sqi" -type d

/cygdrive/d/opb/  目錄下 ,所有 路徑包含  "*src/*/sqi" 的目錄找出來

結果如下


以目錄 /cygdrive/d/opb/api-mock/src/main/java/com/sqi 為例


只需要將其 移動到  /cygdrive/d/opb/api-mock/src/main/java/com/bj 目錄即可


所以 exec子句 實現了這個功能

-exec bash -c 'p=$(echo "{}"); target=$(echo "{}" | sed "s/sqi/bj/g");mv $p $target;' \;


{} 指代的是 前面 find 找到的路徑 將這個路徑的 sqi替換為bj 之後,mv即可


注意  exec 子句結束的時候   空格\;  的 空格不可缺少


參考:

https://askubuntu.com/questions/651315/how-do-you-output-the-filename-in-find-command-while-using-exec


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2638869/,如需轉載,請註明出處,否則將追究法律責任。

相關文章