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

Bash脚本生成TXT文件时文件名格式异常及路径错误求助

解决Bash脚本生成文件名异常及路径反转问题

问题根源

你的问题核心是**list_of_cities.txt中的城市名带有不可见的换行/回车符**(大概率是Windows格式的\r\n换行,而非Bash识别的\n换行)。当脚本读取城市名时,\r(回车符)被保留在city变量中,导致路径拼接时:

  • ${city}.txt实际变成城市名\r.txt
  • 在Bash中,\r会强制光标回到行首,.txt会覆盖路径的开头部分,最终生成的路径变成.txt/你的输出目录/城市名,完全颠倒了结构,同时文件名里的换行符会导致ls识别异常。

修复方案

1. 清理城市名中的特殊字符

在读取城市名后,立即移除变量里的\r、\n等空白字符,确保文件名干净。

2. 提前创建输出目录

避免因目录不存在导致的路径解析异常。

修改后的示例脚本

#!/bin/bash
INPUT_DIR="/c/Users/Roy/DataReceived"
OUTPUT_DIR="/c/Users/Roy/Documents/Result"
CITY_LIST="list_of_cities.txt"

# 确保输出目录存在
mkdir -p "$OUTPUT_DIR"

# 读取城市列表,清理特殊字符后处理
while IFS= read -r city; do
    # 移除回车、换行等空白字符
    clean_city=$(echo "$city" | tr -d '\r\n')
    # 跳过空行
    [ -z "$clean_city" ] && continue
    # 搜索并保存结果
    grep -r "$clean_city" "$INPUT_DIR" > "${OUTPUT_DIR}/${clean_city}.txt"
done < "$CITY_LIST"

额外优化:预处理城市列表文件

如果list_of_cities.txt是Windows格式,可以先转成Unix格式再读取,避免每次循环处理:

# 转换文件格式(仅需执行一次)
dos2unix "$CITY_LIST"

验证修复

执行脚本后,用ls "$OUTPUT_DIR"查看文件名,应该会正常显示NewYork.txt、Rome.txt等,不会再出现'NewYork'$'\n''.txt'这类异常格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:05:26