项目已经做完了,但是包名前缀不符合公司规范.
项目中所有的类似 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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29254281/viewspace-2638869/