wget指定下载的文件名和目录

时间:2014-05-04 14:37:33

标签: bash wget

我有一个名为input.txt的文件,其中包含我要下载的网址列表。网址最后可能包含查询参数,我想从输出文件中删除它,因此名称会很漂亮。另外我有$prefix我想要使用并自动创建目录(如果它们不存在)。

我正在使用的脚本:

cat input.txt | while read line; do
   wget -P "$prefix" -O `echo $line | sed 's/^.*\///' | sed 's/\?.*$//'` $line
done

-P选项有助于指定前缀,更重要的是创建目录(如果它们不存在)。但是没有-O选项的文件名将包含丑陋的查询参数。

-O选项有助于指定文件名。在我的脚本中,我使用sed(最后/之前的网址部分和?之后的查询参数)来切割网址的“不良”部分。唯一的问题是-O选项如果不存在则不会创建目录。

最后wget 不允许同时使用这两个选项。有问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

试试这个。

while read line; do
    dest=${line%%\?*}
    dest=${dest##*/}
    mkdir -p "$prefix"
    wget -O "$prefix/$dest" "$line"
done <input.txt

Bash变量操作基本上等同于您的sed脚本,只有更高效(并且可能更强大),因为不涉及外部过程。

还要注意变量插值周围的双引号。任何包含文件名的变量 - 更常见的是,大多数情况下任何变量插值 - 都需要用双引号。