我有一个名为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
不允许同时使用这两个选项。有问题的解决方案吗?
答案 0 :(得分:0)
试试这个。
while read line; do
dest=${line%%\?*}
dest=${dest##*/}
mkdir -p "$prefix"
wget -O "$prefix/$dest" "$line"
done <input.txt
Bash变量操作基本上等同于您的sed
脚本,只有更高效(并且可能更强大),因为不涉及外部过程。
还要注意变量插值周围的双引号。任何包含文件名的变量 - 更常见的是,大多数情况下任何变量插值 - 都需要用双引号。