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

求助:如何用Bash脚本从Windows格式路径提取文件名并生成XML<File>标签

解决Bash脚本提取Windows路径文件名并生成XML标签的问题

我来帮你调整脚本,完美实现你想要的功能~首先梳理下你原有脚本里可以优化的点:split命令是多余的,循环里的标签格式也写错了,另外我们可以用更高效的方式处理,不用生成中间文件。

方法一:用Bash原生参数扩展(推荐,更高效)

这个方法不需要调用外部命令(比如rev、cut),直接用Bash的参数扩展提取文件名,适合处理大量行的场景:

#!/bin/bash
# 先清空目标XML文件(如果需要覆盖旧内容的话)
> output.xml

while IFS= read -r line; do
    # 用参数扩展提取最后一个反斜杠后的文件名
    # ${line##*\\} 表示从字符串开头删除最长的匹配"*\\"的部分
    filename="${line##*\\}"
    # 写入XML标签到文件
    echo "<File>$filename</File>" >> output.xml
done < tmp

方法二:改进你原来的管道方式

如果你更习惯用管道+文本处理命令,也可以简化原有脚本,去掉多余的split和中间文件:

#!/bin/bash
# 直接通过管道处理每行,生成标签并写入XML
cat tmp | rev | cut -d"\\" -f1 | rev | while IFS= read -r filename; do
    echo "<File>$filename</File>" >> output.xml
done

方法三:用sed一步到位(最简洁)

sed可以一次性完成所有替换操作,一行命令就能搞定:

#!/bin/bash
# 三个sed替换步骤:
# 1. s/^.*\\// 删除最后一个反斜杠及之前的所有内容
# 2. s/^/<File>/ 在行首添加<File>
# 3. s/$/<\/File>/ 在行尾添加</File>
sed 's/^.*\\//; s/^/<File>/; s/$/<\/File>/' tmp > output.xml

这三种方法都能帮你把tmp里的每条Windows路径转换成<File>文件名</File>的格式,直接写入output.xml文件,完全不用手动处理上百条路径。

内容的提问来源于stack exchange,提问作者Brett Burton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:27:43