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

