我正在逐行读取带有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.
答案 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
似乎工作正常,我的代码有什么小问题吗?