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
相关产品推荐
相关产品推荐

