【问题标题】:Download files with differents extensions with bash and wget使用 bash 和 wget 下载具有不同扩展名的文件
【发布时间】:2019-10-22 20:31:00
【问题描述】:

我正在尝试使用 bashwget 下载具有不同扩展名的图像。我必须直接定位文件,因为我在父文件夹上有 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,然后相应地重命名
  • 如果 404 则返回上一个循环(父文件夹)
  • 删除使用 404 创建的空文件


  • 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 八位字节大小下载。我会去检查你不必回答这个的文档;)再次感谢。

    标签: bash file for-loop wget


    【解决方案1】:

    我试过了,也许对你有帮助,

    $? 是 bash 的命令,它返回最后运行的命令的输出。

    如果未找到 *.png,则输出不会为 0。 你可以这样,

    if [[ $? -ne 0 ]]; then ret=$(wget -O ch${i}-${j}.png http://localhost/l4urstyle/wp-content/uploads/2018/${i}/${j}.png 2>&1) fi

        if [[ "$ret" =~ 404\ Not\ Found ]]; then
           echo "breaking code"
            break
        fi
    

    希望这对您有所帮助。 如果这行得通。请接受答案。 :D 关于正在下载的 0 个八位字节大小的文件。我会想到一些事情,让你知道我可以如何帮助你。

    快乐编码:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多