Android res复制脚本

./copy.sh A路径 B路径 文件名 key

./copy.sh A_res B_res strings.xml hello

将A_res文件为strings.xml中的hello,复制到项目B_res文件为strings.xml中

复制代码
#!/bin/bash

# 检查输入的参数数量
if [ "$#" -ne 4 ]; then
    echo "用法: $0 <源路径> <目标路径> <目标文件名> <关键字>"
    exit 1
fi

# 获取输入的四个参数

oldPath=$1         # 源路径
newPath=$2         # 目标路径
targetFile=$3      # 目标文件名
keyword=$4         # 要查找的关键字

# 定义获取字符串中心内容的函数
function getCenter {
    local one=$1
    local theLeft=`echo ${one#*\">}`
    local theCenter=`echo ${theLeft%<\/*}`
    echo "$theCenter"
}

# 定义删除文件末尾多余空行的函数
function deleteBlankRow() {
    local line=$1
    local a=`awk '{if($0 != "") {i = 0} else {i++}} END {print i}' $line` # 获取末尾空行数
    if [ "$a" -ne 0 ]; then
        for ((i=1; i<=a; i++)); do
            sed -i -e '$ {/^$/d;}' $line # 删除末尾空行
        done
    fi
}

# 进入源路径并查找指定文件
cd "$oldPath" || exit
find . -name "$targetFile" -type f | cut -c3- > stringList.txt

# 定义注释内容
strt="<!--SR: modify by $(whoami) $(date +%Y%m%d) start-->"
endd="<!--SR: modify by $(whoami) $(date +%Y%m%d) end-->"

# 循环读取文件列表中的每一行
while read -r line; do
    ss=`grep -wh "$keyword" "$line"`  # 在文件中查找关键字
    if [ -z "$ss" ]; then
        continue
    fi

    # 切换到目标路径
    cd "$newPath" || exit
    if [ -e "$line" ]; then
        ww=`grep -wh "$keyword" "$line"`
        if [ -z "$ww" ]; then
            # 如果目标文件中没有关键字内容
            deleteBlankRow "$line"
            sed -i '$d' "$line"
            echo -e "$ss" >> "$line"
            echo "</resources>" >> "$line"
            #dos2unix "$line"  # 转换文件格式,去掉 ^M
            cd "$oldPath" || exit
            continue
        else
            # 如果目标文件中有关键字内容,比较字符串
            L=`grep -wn "$keyword" "$line" | cut -d : -f 1`
            nr=`sed -n "${L}p" "$line"`
            nrCenter=`getCenter "$nr"`
            ssCenter=`getCenter "$ss"`
            if [[ "$ssCenter" == "$nrCenter" ]]; then
                cd "$oldPath" || exit
                echo "相等"
                continue
            else
                echo "不相等"
            fi

            # 移植字符串并添加注释
            theLeft=`echo ${nr%\">*}`
            kn=`echo "${nr%%<*}" | wc -L`
            sed -i "${L}d" "$line"
            ssRight=`echo ${ss#*\">}`
            ssNew=$theLeft\">$ssRight
            for (( j=1; j<$kn; j++ )); do
                strt=" ${strt}"
                endd=" ${endd}"
                ssNew=" ${ssNew}"
            done
            sed -i "${L}i\\ ${ssNew}" "$line"
            sed -i "${L}i\\ ${strt}" "$line"
            sed -i "$((L+2))i\\ ${endd}" "$line"
            #dos2unix "$line"  # 转换文件格式,去掉 ^M
            cd "$oldPath" || exit
            continue
        fi
    else
        echo "$line 文件不存在"
        cd "$oldPath" || exit
        continue
    fi
done < stringList.txt

# 清理临时文件
rm stringList.txt
相关推荐
Digitally1 小时前
如何将文件从 iPhone 传输到 Android(新指南)
android·ios·iphone
m0_694845571 小时前
服务器如何配置防火墙规则开放/关闭端口?
linux·服务器·安全·云计算
whysqwhw2 小时前
OkHttp深度架构缺陷分析与演进规划
android
阿巴~阿巴~2 小时前
Linux基本命令篇 —— alias命令
linux·服务器·bash
用户7093722538512 小时前
Android14 SystemUI NotificationShadeWindowView 加载显示过程
android
木叶丸2 小时前
跨平台方案该如何选择?
android·前端·ios
好名字更能让你们记住我3 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
门思科技3 小时前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网
小锋学长生活大爆炸3 小时前
【知识】RPC和gRPC
服务器·网络协议·rpc
学习编程的gas3 小时前
Linux开发工具——gcc/g++
linux·运维·服务器