我正在从 url 下载文件列表,其中包含使用 wget 的文件名之外的附加信息。这会产生如下文件名:
pythonbook.pdf@y=11&x=123
我真正想要的是 pythonbook.pdf 部分。我的文件列表基本上是一个 URL 列表,例如:
https://dl.domain.com/pythonbook.pdf@y=11&x=123
如何去掉文件名中不必要的部分?
答案1
在这种情况下,可能最容易迭代整个列表(因为wget
似乎不支持动态创建输出文件名):
while read url; do
t=${url##*/} # removes protocol and hostname
pdf=${t%@*} # removes part from @ onwards
wget -O "$pdf" "$url"
done < LIST-OF-URLs
url
是从文件中的 URL 列表中读取的 URL,pdf
只是其中的文件名部分。
如果名称不唯一,您可以在文件名中添加一个数字,例如这样(假设所有文件都是 PDF):
i=0
while read url; do
t=${url##*/} # removes protocol and hostname
pdf=${t%.pdf@*} # removes part from .pdf@ onwards
wget -O "$pdf-$i.pdf" "$url"
((i++))
done < LIST-OF-URLs
或(如果文件具有不同的后缀)
i=0
while read url; do
t=${pdf##*/} # removes protocol and hostname
pdf=${t%@*} # removes part from @ onwards
wget -O "$i-$pdf" "$url"
((i++))
done < LIST-OF-URLs