Bash,wget从输出文件名中删除逗号

时间:2015-05-29 17:39:25

标签: linux bash curl wget

我正在逐行读取带有URL的文件,然后我将URL传递给wget:

FILE=/home/img-url.txt
while read line; do
url=$line
wget -N -P /home/img/ $url
done < $FILE

这样可行,但某些文件在文件名中包含逗号。如何在没有逗号的情况下保存文件?

示例:

http://xy.com/0005.jpg -> saved as 0005.jpg
http://xy.com/0022,22.jpg -> save as 002222.jpg not as 0022,22

我希望你发现我的问题很有趣。

更新

我们有一些很好的解决方案,但有时间戳错误的解决方案吗?

WARNING: timestamping does nothing in combination with -O. See the manual
for details.

3 个答案:

答案 0 :(得分:1)

在循环体中,您需要从URL生成文件名而不使用逗号,并且不需要URL的前导部分,并告诉wget以其他名称保存。

A.prefetch_related('bars').latest()

答案 1 :(得分:1)

这应该有效:

url="$line"
filename="${url##*/}"
filename="${filename//,/}"
wget -P /home/img/ "$url" -O "$filename"

使用-N和-O都会发出警告信息。 wget手册说:

  不支持

-N(用于时间戳检查)              与-O组合:由于文件始终是新创建的,因此它始终是              有一个非常新的时间戳。

因此,当您使用-O选项时,它实际上会创建一个带有新时间戳的新文件,因此-N选项变为虚拟(它无法执行此操作)。如果您想保留时间戳,那么解决方法可能就是:

url="$line"
wget -N -P /home/img/ "$url"
file="${url##*/}"
newfile="${filename//,/}"
[[ $file != $newfile ]] && cp -p /home/img/"$file" /home/img/"$newfile" && rm /home/img/"$file"

答案 2 :(得分:0)

与此同时,我写了这个:

url=$line
$file=`echo ${url##*/} | sed 's/,//'`
wget -N -P /home/image/dema-ktlg/ -O $file $url

似乎工作正常,我的代码有什么小问题吗?