安卓屏幕适配从sdp还原dp(批量处理)

安卓屏幕适配从sdp还原dp(批量处理)

#!/bin/bash

# 检查是否提供了目录路径作为参数
if [ $# -eq 0 ]; then
    echo "请提供一个目录路径作为参数。"
    exit 1
fi

# 获取指定的目录路径
target_dir="$1"

# 检查目录是否存在
if [ ! -d "$target_dir" ]; then
    echo "指定的目录 $target_dir 不存在。"
    exit 1
fi

# 使用 find 命令递归查找指定目录下的所有 XML 文件
find "$target_dir" -type f -name "*.xml" | while read -r xml_file; do
    # 检查文件最后一行是否为空行,若不是则添加空行
    last_char=$(tail -c 1 "$xml_file")
    if [ -n "$last_char" ]; then
        echo >> "$xml_file"
    fi

    # 创建临时文件用于存储修改后的内容
    temp_file="${xml_file}.tmp"

    # 逐行读取 XML 文件内容
    while IFS= read -r line; do
        # 查找双引号内以 "@dimen/_" 开头,中间是数字,并以 "sdp" 结尾的字符串
        while [[ $line =~ \"@dimen/_(.*)sdp\" ]]; do
            match="${BASH_REMATCH[0]}"
            number_str="${BASH_REMATCH[1]}"

            # 去除可能存在的 "@dimen/_minus" 中的 "minus" 前缀
            number_str="${number_str#minus}"

            # 检查提取的部分是否为纯数字
            if [[ $number_str =~ ^[0-9]+$ ]]; then
                number=$number_str
                if [ "$number" -eq 1 ]; then
                    new_number=$((number - 1))
                elif [ "$number" -gt 1 ] && [ "$number" -le 8 ]; then
                    new_number=$((number + 2))
                elif [ "$number" -gt 8 ]; then
                    new_number=$((number + 10))
                fi

                # 生成替换后的字符串
                replacement="${new_number}dip"
                # 将匹配到的字符串替换为新字符串
                line="${line//$match/\"$replacement\"}"
            fi
        done
        # 将修改后的行写入临时文件
        echo "$line" >> "$temp_file"
    done < "$xml_file"

    # 用临时文件替换原文件
    mv "$temp_file" "$xml_file"
done

echo "处理完成。"

使用步骤

  1. 保存脚本:把上述脚本保存成一个文件,比如 process_xml_recursive.sh。
  2. 赋予执行权限:在终端里运行以下命令,给脚本添加执行权限:
chmod +x process_xml_recursive.sh
  1. 运行脚本:在终端中执行脚本,并传入要处理的目录路径,示例如下:
./process_xml_recursive.sh /your/target/directory

脚本解释

1.参数与目录检查

  • 脚本会先检查是否提供了目录路径作为参数,如果没提供,就输出提示信息并退出。
  • 接着检查指定的目录是否存在,若不存在则输出错误信息并退出。

2.递归查找 XML 文件:使用 find 命令递归查找指定目录及其子目录下的所有 XML 文件。
3.处理每个 XML 文件

  • 检查并添加空行:通过 tail -c 1 命令获取文件的最后一个字符,若不为空就添加一个空行。
  • 创建临时文件:创建一个临时文件来存放修改后的内容,防止直接修改原文件导致数据丢失。
  • 逐行处理文件内容
    • 使用正则表达式 "@dimen/_(.*)sdp" 查找双引号内符合条件的字符串。
    • 提取中间的数字部分,并去除可能的 "minus" 前缀。
    • 根据数字的不同情况进行计算:等于 1 时减 1;大于 1 且小于等于 8 时加 2;大于 8 时加 10。
    • 生成替换字符串,去除 "@dimen/_" 前缀和 "sdp" 后缀,只保留计算后的数字和 "dip" 后缀。
    • 将原匹配字符串替换为新字符串,并把修改后的行写入临时文件。
  • 更新文件:使用 mv 命令用临时文件替换原文件。

注意事项

  • 此脚本会直接修改原 XML 文件,建议运行前对重要文件进行备份。
  • 脚本假设 XML 文件中的字符串都用双引号包裹,若存在单引号等情况,需调整正则表达式。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容