安卓屏幕適配從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 "處理完成。"
使用步驟
- 保存腳本:把上述腳本保存成一個(gè)文件,比如 process_xml_recursive.sh。
- 賦予執(zhí)行權(quán)限:在終端里運(yùn)行以下命令,給腳本添加執(zhí)行權(quán)限:
chmod +x process_xml_recursive.sh
- 運(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á)式。