You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本发送XML至Android模拟器异常:多文件时首文件未发送

问题分析与修复

你的脚本核心问题是循环逻辑混乱,导致文件处理顺序和关联关系完全错误:

  1. 外层循环遍历当前目录所有文件(包括非XML文件,比如脚本自身),但内层循环又单独获取XML文件列表,两者没有关联,导致错误地将非XML文件当作处理对象,或者同一个XML文件被重复处理。
  2. 嵌套循环会让单个文件被多次执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:30:48