安卓屏幕適配從dp或dip適配為sdp(批量處理)

遞歸遍歷指定目錄及其子目錄下的所有 XML 文件,從dp和dip適配為sdp

#!/bin/bash

# 檢查是否傳入了目錄參數(shù)
if [ $# -eq 0 ]; then
    echo "請?zhí)峁┮粋€目錄路徑作為參數(shù)。"
    exit 1
fi

target_dir="$1"

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

# 遞歸查找所有 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)建臨時文件用于存放處理后的內(nèi)容
    temp_file="${xml_file}.tmp"

    # 逐行處理 XML 文件
    while IFS= read -r line; do
        # 查找雙引號內(nèi)數(shù)字開頭且以 dp 或 dip 結(jié)尾的字符串(忽略 0dp 和 0dip)
        while [[ $line =~ \"([1-9][0-9]*)(dp|dip)\" ]]; do
            match="${BASH_REMATCH[0]}"
            number="${BASH_REMATCH[1]}"
            unit="${BASH_REMATCH[2]}"

            if [ "$number" -le 10 ]; then
                new_number=$((number - 2))
            else
                new_number=$((number - 10))
            fi

            if [ "$new_number" -gt 0 ]; then
                replacement="@dimen/_${new_number}sdp"
            elif [ "$new_number" -lt 0 ]; then
                abs_new_number=$((new_number * -1))
                replacement="@dimen/_minus${abs_new_number}sdp"
            else
                replacement="@dimen/_1sdp"
            fi

            line="${line//$match/\"$replacement\"}"
        done
        echo "$line" >> "$temp_file"
    done < "$xml_file"

    # 用臨時文件替換原文件
    mv "$temp_file" "$xml_file"
done

echo "處理完成。"

使用說明

  1. 保存腳本:將上述腳本保存為一個文件,例如 process_xml.sh。
  2. 賦予執(zhí)行權(quán)限:在終端中運(yùn)行以下命令為腳本添加執(zhí)行權(quán)限:
chmod +x process_xml.sh
  1. 執(zhí)行腳本:指定要處理的目錄路徑來運(yùn)行腳本,示例如下:
./process_xml.sh /your/target/directory

腳本解釋

  1. 參數(shù)檢查:腳本會檢查是否傳入了目錄參數(shù),以及該目錄是否存在。若不滿足條件,會輸出相應(yīng)的錯誤信息并退出。
  2. 遞歸查找 XML 文件:使用 find 命令遞歸查找指定目錄及其子目錄下的所有 XML 文件。
  3. 處理每個 XML 文件
    • 檢查并添加空行:通過 tail -c 1 命令獲取文件的最后一個字符,若不為空則添加一個空行。
    • 逐行處理內(nèi)容:使用正則表達(dá)式 "([1-9][0-9]*)(dp|dip)" 查找雙引號內(nèi)數(shù)字開頭且以 dp 或 dip 結(jié)尾的字符串(忽略 0dp 和 0dip)。
    • 數(shù)字處理:根據(jù)數(shù)字大小進(jìn)行不同的減法操作(小于等于 10 減 2,大于 10 減 10)。
    • 結(jié)果處理:根據(jù)減法結(jié)果生成不同的替換字符串。
    • 替換字符串:將匹配到的字符串替換為處理后的字符串。
    • 更新文件:將處理后的內(nèi)容逐行寫入臨時文件,最后用臨時文件替換原文件。

注意事項(xiàng)

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

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

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