【发布时间】:2019-10-22 20:31:00
【问题描述】:
我正在尝试使用 bash 和 wget 下载具有不同扩展名的图像。我必须直接定位文件,因为我在父文件夹上有 403 错误,所以我不能通过定位父文件夹来使用 -A 选项。
现在我有以下代码,它适用于.jgp,但如果下一个文件是.png,例如我的循环中断并继续到下一个文件夹,因此当前文件夹中的.png 不是已下载。
for i in {1..945}; do
for j in {01..100}; do
j=`printf '%02d' $j`
ret=$(wget -O ch${i}-${j}.jpg https://www.domain.co/uploads/chapters/chapitre-${i}/${j}.jpg 2>&1)
if [[ "$ret" =~ 404\ Not\ Found ]]; then
break
fi
done
done
无论扩展名如何,我都无法找到下载文件的方法。
编辑:
所以这是我最后的 sn-p 给有兴趣的人。
它的作用是:
.jpg 还是.png,然后相应地重命名for i in {245..945}; do
for j in {01..60}; do
j=`printf '%02d' $j`
ret=$(wget -O ch${i}-${j}.jpg https://www.yourdomain.co/uploads/parentfoldernumber-${i}/image-${j}.jpg 2>&1)
if [[ $? -ne 0 ]]; then
ret=$(wget -O ch${i}-${j}.png https://www.yourdomain.co/uploads/parentfoldernumber-${i}/image-${j}.png 2>&1)
fi
if [[ "$ret" =~ 404\ Not\ Found ]]; then
break
fi
done
find . -type f -empty -delete
done
【问题讨论】:
-
你还没有处理代码如果一个png文件来了会发生什么...?如果 ref 没有找到 jpg 则循环中断 As of IF 条件提到。您需要处理或捕获 png 出现的部分。
-
是的,因为我仍在寻找如何去做。这是我不熟悉语法的第一个 bash 脚本,抱歉。有没有办法将扩展放入变量中?
-
我们知道那里会出现什么扩展吗?或者我们只知道文件名,而不是扩展名?因为如果我们知道文件扩展名类型,我们可以执行类似 switch case 之类的操作来检查扩展名并下载存在的扩展名。
-
我尝试了一些东西,也许这会对你有所帮助,
$?是 bash 的命令,它返回最后运行的命令的输出。如果未找到 *.png,则输出不会为 0。您可以用它来判断它,if [[ $? -ne 0 ]]; then ret=$(wget -O ch${i}-${j}.png http://localhost/project/wp-content/uploads/2018/${i}/${j}.png 2>&1) fi if [[ "$ret" =~ 404\ Not\ Found ]]; then echo "breaking code" break fi希望这对您有所帮助。在 jpg 的 wget 代码之后添加此命令 -
感谢它工作得很好。现在,我知道我在推一点,但我想知道是否可以告诉 wget 如果 404 不下载该文件。因为现在,它以 0 八位字节大小下载。我会去检查你不必回答这个的文档;)再次感谢。