Kei*_*ley 38 wget podcasts http rename
我正在使用 wget 下载一个站点,并且很多链接都附加了查询,所以当我这样做时:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Run Code Online (Sandbox Code Playgroud)
我最终得到了很多这样的文件:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Run Code Online (Sandbox Code Playgroud)
我想结束的是:
1.mp3
2.mp3
3.mp3
Run Code Online (Sandbox Code Playgroud)
这一切都发生在 ubuntu linux 中,我有 wget 1.10.2。
我知道在通过脚本重命名所有内容后,我可以做到这一点。但是,我真的很喜欢 wget 中的解决方案,这样我就可以在下载过程中看到正确的名称。
谁能帮我解开这个?
小智 26
如果服务器很友好,它可能会在下载文件上粘贴 Content-Disposition 标头,告知您的客户端正确的文件名。告诉 wget 收听最终文件名的标头非常简单:
wget --content-disposition
Run Code Online (Sandbox Code Playgroud)
您需要新版本的 wget 才能使用此功能。
我不知道它如何处理声称文件名为“/etc/passwd”的服务器。
小智 21
在处理了大批量之后,我意识到我应该指示wget
忽略查询字符串。我不想再做一次,所以我制作了这个对我有用的脚本:
# /bin/bash
for i in `find $1 -type f`
do
mv $i `echo $i | cut -d? -f1`
done
Run Code Online (Sandbox Code Playgroud)
把它放在一个像rmqstr
和chmod +x rmqstr
语法这样的文件中:./rmqstr <directory (defaults to .)>
它将递归地从所有文件名中删除查询字符串。
我认为,为了wget
保存为不同于 URL 指定的文件名,您需要使用-O filename
参数。只有当你给它一个 URL 时,它才会做你想要的——如果有多个 URL,所有下载的内容最终都会以filename
.
但这确实是答案。与其尝试在一个wget
命令中完成所有操作,不如使用多个命令。现在您的工作流程变成:
wget
以获取包含链接的基本 HTML 文件;mp3
,
结尾的 Foreach URLhttp://foo/bar/baz.mp3?gargle=blaster
变成baz.mp3
wget <URL> -O <filename>
这解决了您的问题,但现在您需要弄清楚如何获取基本文件以找到您的mp3
URL。
你有一个特定的站点/基本 URL 吗?步骤 1 和 3 将通过具体示例更容易处理。