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

Linux下批量下载CSV中URL并重命名的bash脚本报错求助

解决bash脚本的换行符错误与CSV文件下载优化

嘿,我来帮你搞定这个问题!你遇到的错误其实是很常见的新手坑——脚本文件用了Windows的换行格式(CRLF),而bash只认Unix系统的换行格式(LF)。

错误原因解释

Windows系统的换行符是\r\n(回车+换行),而Unix/Linux是\n(仅换行)。当bash读取你的脚本时,会把每行末尾的\r当成命令的一部分,所以才会出现$'\r': command not found的报错,进而引发后续的语法错误。


解决步骤

1. 把脚本转换成Unix换行格式

有两种简单的方法:

  • 用dos2unix工具(最方便):
    先安装工具(如果没装的话):
    # Ubuntu/Debian系
    sudo apt install dos2unix
    # CentOS/RHEL系
    sudo yum install dos2unix
    
    然后转换脚本:
    dos2unix your_script.sh
    
  • 如果没有dos2unix,用sed命令手动去除\r:
    sed -i 's/\r$//' your_script.sh
    

2. 优化脚本避免文件名空格问题

你的原脚本还有个潜在问题:如果文件名里包含空格,wget -O $filename $url会因为bash拆分变量而出错。给变量加上双引号就能解决这个问题:

#!/bin/bash
while IFS=',' read -r url filename
do
    # 给变量加双引号,保留空格和特殊字符
    wget -O "$filename" "$url"
done < urls.csv

3. 额外注意事项

  • 确保你的urls.csv文件也用Unix换行格式,否则读取时也可能出现奇怪的问题,同样可以用上面的dos2unix或sed命令转换。
  • 如果CSV里逗号前后有空格,比如https://example.com/img.jpg, 我的图片.jpg,可以把IFS=','改成IFS=', '来忽略逗号后的空格(或者提前整理CSV格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:52:28