加载网址列表时,从给定的输入中省略%0D

时间:2018-07-27 01:31:54

标签: bash

我有这个bash脚本,它加载了urls的列表并下载了一个数字名称的文件:

counter=1
while IFS= read -r url;do
    fileName="$counter" # Add a rule to define a new name for each file here
    counter=$((counter+1))
    wget -O "$fileName.mp4" "$url"
done < list 

但是,当我加载urls时出现问题,当我在urls中打开nano时,它看起来像这样:

www.somesite.com/43c264c5a93459842e6bf1cbbc3a1a9b.mp4
www.somesite.com/fa6463dfecb3d03dade573b28531c692.mp4
www.somesite.com/7abac8e804c2a21379b3542d02c871fd.mp4
www.somesite.com/6346cd728b281297eb075804626cf007.mp4

但是,当script将这些urls加载到$filename变量中时,它最终会像这样:

www.somesite.com/24ebbbc4a45a7331e0789fda099f3d55.mp4%0D

那小小的%0D完全破坏了整个过程,我该如何摆脱呢?

1 个答案:

答案 0 :(得分:1)

URL末尾的那些奇怪字符是回车符。这可能表明该文件是在Windows中创建的,行尾包含回车符,后跟换行符。 UNIX实用程序通常期望行仅以换行结尾。

如果您使用的是vim编辑器,则可以通过运行以下命令将文件list中的行尾转换为UNIX约定:

vim list '+set ff=unix' +wq

如果您要自动将list中的回车符作为脚本的一部分,请考虑以下内容:

counter=1
while read url; do
  wget -O "$counter.mp4" "$url"
  counter=$((counter+1))
done <<<"$(sed 's/\r$//' < list)"

请注意,这需要GNU sed(随大多数Linux发行版一起提供),并且可以使用brew install gnu-sed安装在OSX上。