使用 wget 获得健全的文件名

使用 wget 获得健全的文件名

我正在从 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

相关内容