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

Bash, wget remove comma from output filename

我正在逐行读取带有 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.

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

url=$line
file=`echo $url | sed -e 's|^.*/||' -e 's/,//g'`
wget -N -P /home/image/dema-ktlg/ -O $file $url

这应该有效:

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

同时使用-N 和-O 将引发警告消息。 wget 手册说:

-N (for timestamp-checking) is not supported in combination with -O: since file is always newly created, it will always have a very new timestamp.

因此,当您使用 -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"

同时我写了这个:

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

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