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