Bash脚本发送XML至Android模拟器异常:多文件时首文件未发送
问题分析与修复
你的脚本核心问题是循环逻辑混乱,导致文件处理顺序和关联关系完全错误:
- 外层循环遍历当前目录所有文件(包括非XML文件,比如脚本自身),但内层循环又单独获取XML文件列表,两者没有关联,导致错误地将非XML文件当作处理对象,或者同一个XML文件被重复处理。
- 嵌套循环会让单个文件被多次执行
adb push和mv操作,当第一个文件被mv移走后,后续的操作会因文件不存在而出错,最终表现为你看到的“第一个文件跳过发送直接移动”的异常。
修复后的脚本
# 遍历当前目录下所有XML文件 for xml_file in *.xml; do # 防止目录下无XML文件时,*.xml作为字符串被处理 [ -f "$xml_file" ] || continue # 将XML文件推送至模拟器指定路径 adb push "$xml_file" "/storage/emulated/0/importxml/$xml_file" # 移动文件到目标目录并添加.ok后缀 mv "$xml_file" "${1}/${xml_file}.ok" sleep 1 done
关键修正点
- 直接遍历XML文件:放弃多余的
find和嵌套循环,只处理.xml后缀的文件,逻辑更清晰,符合需求。 - 加入文件存在检查:避免当目录下没有XML文件时,
*.xml会被当作普通字符串执行操作。 - 变量加双引号:防止文件名包含空格、特殊字符时出现解析错误。
- 一对一处理:每个XML文件仅执行一次推送和移动操作,完全匹配你的需求。
原脚本错误细节
files=( $(find "$PWD" -maxdepth 1 -type f) )获取了当前目录所有普通文件,包括脚本自身,导致第一个被处理的可能不是XML文件,被错误移动后,你误以为是第一个XML文件被跳过。- 嵌套循环会让同一个文件对应所有XML文件名执行推送和移动,造成重复操作、文件丢失或推送错误的文件到模拟器。
内容的提问来源于stack exchange,提问作者João Batista da Silva Avila
相关产品推荐
相关产品推荐

