来自url列表的wget jpg保持相同的结构

时间:2014-12-17 23:49:07

标签: bash sh wget cycle mkdir

我有一个9000网址列表,要废弃到一个file.txt中,保留与url列表中的writed相同的dir结构。

每个网址由http://domain.com/ $ dir / $ sub1 / $ ID / img_ $ ID.jpg组成,其中$ dir和$ sub1是0到9之间的整数

我试过了

wget -i file.txt

但是我需要在同一个本地目录中使用任何img_ $ ID.jpg,所以我在root中获取任何文件,从而丢失了$ dir /%sub1 / $ ID文件夹结构。

我认为必须编写一个

的脚本
mkdir -p $dir/$sub1/$ID
wget -P $dir/$ #Correcting a typo in the message i left the full path pending, it was the same as previous mkdir command => "wget -P $dir/$sub1/$ID"

对于file.txt中的每一行,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

我认为带有一些字符串处理的简单shell循环应该对你有用:

while read line; do
  line2=${line%/*}     # removing filename
  line3=${line2#*//}   # removing "http://"
  path=${line3#*/}     # removing "domain.com/"
  mkdir -p $path
  wget -P$path $line
done <file.txt

(SO&#39编辑器错误地解释了表达式中的#并将其余字符串的颜色标记为评论 - 请不要介意。实际的评论是非常正确的。)< / p>

请注意,wget命令与您描述的不同(wget -P $dir/$),而是看起来更正确(wget -P $dir/$sub1/$ID)。如果您坚持使用您的版本,请说明终端$是什么意思。

此外,出于调试目的,您可能希望在运行实际脚本(复制文件)之前验证处理 - 您可能会这样做:

while read line; do
  echo $line
  line2=${line%/*}     # removing filename
  echo $line2
  line3=${line2#*//}   # removing "http://"
  echo $line3
  path=${line3#*/}     # removing "domain.com/"
  echo $path
done <file.txt

您将看到所有字符串处理步骤,并确保生成的路径正确。