CRLF行结束符问题

背景

别人搭建了一个服务,让我下载静态资源,现在我需要把页面上的所有静态资源下载下来,本来想着直接让同事给我从服务器上打个包得了,但是秉持着自己动手丰衣足食的想法。。。算了不扯淡,那个同事是我领导。。。领导最近火气大,能不靠近就不靠近。。。自己十来分钟写个脚本扒拉下来得了,但是,本以为很简单的操作,却出现了问题,先看一下那个页面长什么样子

其实就是类似用nginx做了个代理,或者python3 -m http.server port

执行脚本环境:macos

我的错误做法

bash 复制代码
#!/bin/bash
# $1 glb_list
# $2 result_dir
# $3 urlprefix
mkdir -p ./glbs_dir/$2
while IFS= read -r line
do
  new_url=$3$file
  echo "$new_url"
  curl -o "./glbs_dir/$2/$line" "$new_url"
  #echo "$3$line"
  #echo "./glbs_dir/$2/$line"
done < $1
# 这段代码放在mac上执行,下载出来的文件放到linux上结尾会带有\r

下载出来的文件,在mac上看着很正常,但是放到服务器(centos)上,执行ll文件末尾会出现?问号,执行ls -lb 文件末尾会出现\r,这样我在服务器上操作这些静态资源就会出现问题

错误原因

在macOS上,某些工具可能会在文本文件中保留Windows风格的CRLF(\r\n),而Linux使用LF(\n)。当在macOS上读取文件时,read -r line 会包含结尾的\r字符。

解法

在读取文件时清理行结束符

bash 复制代码
#!/bin/bash
# $1 glb_list
# $2 result_dir
# $3 urlprefix
mkdir -p ./glbs_dir/$2
while IFS= read -r line
do
  # 移除可能的\r字符
  line=$(echo "$line" | tr -d '\r')
  new_url=$3$line  # 这里也应该是$line而不是$file
  echo "$new_url"
  curl -o "./glbs_dir/$2/$line" "$new_url"
done < $1
相关推荐
张小姐的猫2 天前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
笨拙的老猴子8 天前
小明学架构师的第七课:策略模式:告别if-else的选择困难症
系统架构·策略模式
肖爱Kun9 天前
C++设计策略模式
开发语言·c++·策略模式
折哥的程序人生 · 物流技术专研10 天前
Java 23 种设计模式:从踩坑到精通 | 番外:策略 vs 模板方法 —— 组合与继承的终极对决
java·策略模式·java面试·comparator·模版方法模式·java设计模式·从踩坑到精通
折哥的程序人生 · 物流技术专研10 天前
Java 23 种设计模式:从踩坑到精通 | 番外:状态 vs 策略 —— if-else 消除的两条路,你走对了吗?
java·spring·状态模式·策略模式·java面试·java设计模式·从踩坑到精通
ttod_qzstudio13 天前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式
儒雅的名13 天前
GoF设计模式——策略模式
设计模式·bash·策略模式
折哥的程序人生 · 物流技术专研14 天前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
在水一缸15 天前
拒绝被打扰:深度解析 macOS 进程守护与“反自动启动”攻防战
macos·策略模式·用户体验·进程守护·自动启动·系统权限
折哥的程序人生 · 物流技术专研15 天前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎