安卓屏幕適配從sdp還原dp(批量處理)

安卓屏幕適配從sdp還原dp(批量處理)

#!/bin/bash

# 檢查是否提供了目錄路徑作為參數(shù)
if [ $# -eq 0 ]; then
    echo "請(qǐng)?zhí)峁┮粋€(gè)目錄路徑作為參數(shù)。"
    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

    # 創(chuàng)建臨時(shí)文件用于存儲(chǔ)修改后的內(nèi)容
    temp_file="${xml_file}.tmp"

    # 逐行讀取 XML 文件內(nèi)容
    while IFS= read -r line; do
        # 查找雙引號(hào)內(nèi)以 "@dimen/_" 開頭,中間是數(shù)字,并以 "sdp" 結(jié)尾的字符串
        while [[ $line =~ \"@dimen/_(.*)sdp\" ]]; do
            match="${BASH_REMATCH[0]}"
            number_str="${BASH_REMATCH[1]}"

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

            # 檢查提取的部分是否為純數(shù)字
            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
        # 將修改后的行寫入臨時(shí)文件
        echo "$line" >> "$temp_file"
    done < "$xml_file"

    # 用臨時(shí)文件替換原文件
    mv "$temp_file" "$xml_file"
done

echo "處理完成。"

使用步驟

  1. 保存腳本:把上述腳本保存成一個(gè)文件,比如 process_xml_recursive.sh。
  2. 賦予執(zhí)行權(quán)限:在終端里運(yùn)行以下命令,給腳本添加執(zhí)行權(quán)限:
chmod +x process_xml_recursive.sh
  1. 運(yùn)行腳本:在終端中執(zhí)行腳本,并傳入要處理的目錄路徑,示例如下:
./process_xml_recursive.sh /your/target/directory

腳本解釋

1.參數(shù)與目錄檢查

  • 腳本會(huì)先檢查是否提供了目錄路徑作為參數(shù),如果沒提供,就輸出提示信息并退出。
  • 接著檢查指定的目錄是否存在,若不存在則輸出錯(cuò)誤信息并退出。

2.遞歸查找 XML 文件:使用 find 命令遞歸查找指定目錄及其子目錄下的所有 XML 文件。
3.處理每個(gè) XML 文件

  • 檢查并添加空行:通過 tail -c 1 命令獲取文件的最后一個(gè)字符,若不為空就添加一個(gè)空行。
  • 創(chuàng)建臨時(shí)文件:創(chuàng)建一個(gè)臨時(shí)文件來存放修改后的內(nèi)容,防止直接修改原文件導(dǎo)致數(shù)據(jù)丟失。
  • 逐行處理文件內(nèi)容
    • 使用正則表達(dá)式 "@dimen/_(.*)sdp" 查找雙引號(hào)內(nèi)符合條件的字符串。
    • 提取中間的數(shù)字部分,并去除可能的 "minus" 前綴。
    • 根據(jù)數(shù)字的不同情況進(jìn)行計(jì)算:等于 1 時(shí)減 1;大于 1 且小于等于 8 時(shí)加 2;大于 8 時(shí)加 10。
    • 生成替換字符串,去除 "@dimen/_" 前綴和 "sdp" 后綴,只保留計(jì)算后的數(shù)字和 "dip" 后綴。
    • 將原匹配字符串替換為新字符串,并把修改后的行寫入臨時(shí)文件。
  • 更新文件:使用 mv 命令用臨時(shí)文件替換原文件。

注意事項(xiàng)

  • 此腳本會(huì)直接修改原 XML 文件,建議運(yùn)行前對(duì)重要文件進(jìn)行備份。
  • 腳本假設(shè) XML 文件中的字符串都用雙引號(hào)包裹,若存在單引號(hào)等情況,需調(diào)整正則表達(dá)式。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容