我有这个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
完全破坏了整个过程,我该如何摆脱呢?
答案 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上。