bash 批量 you-get

简介

下载失败重新下载,最多 5 次。
之后使用 ffmpeg 转为 h264 的视频编码。
然后 zip 加密。

代码

#!/bin/bash

url_list=()
zippasswd=""
declare -a name_list

echo "" > work.log
echo "" > cache.info

for ((i=0;i<${#url_list[@]};i++))
do
    echo 开始解析:${url_list[i]} | tee -a work.log
    wget ${url_list[i]} -O $i.html >> work.log 2>&1
    echo 下载完成 | tee -a work.log

    echo 尝试解压 | tee -a work.log
    file $i.html | tee -a work.log >> cache.info
    if [ "$(cat cache.info | grep -Eo "HTML Document")"x = "HTML Document"x ]; then
        echo 文档为 HTML 文档 | tee -a work.log
    else
        mv $i.html $i.html.gz
        gunzip $i.html.gz
        echo 完成解压 | tee -a work.log
    fi

    name_list[$i]=$(cat $i.html | grep -Eo "\"name\": \"(.*?)\"" | sed "s/\"name\": \"//" | sed "s/\"//")
    dl_list=$(cat $i.html | grep -Eo "\"epList\":.*?\"epInfo\"" | grep -oP "\"id\":(.*?)," | sed "s/\"id\":/https:\/\/www.bilibili.com\/bangumi\/play\/ep/" | sed "s/\,//")
    rm -f $i.html

    echo | tee -a work.log
    echo 名称:${name_list[i]} | tee -a work.log
    echo 链接: | tee -a work.log
    for t in ${dl_list[@]}
    do
        echo $t | tee -a work.log
    done

    echo | tee -a work.log
    echo 开始下载... | tee -a work.log
    for link in ${dl_list[@]}
    do
        echo 尝试下载 $link | tee -a work.log
        for ((cnt=0;cnt<5;cnt++))
        do
            echo 尝试第 $(($cnt+1)) 次下载 $link | tee -a work.log
            echo "" > cache.info
            if [ -e cookies.sqlite ]; then
                echo 检测到 cookies.sqlite 文件,将使用 cookies.sqlite | tee -a work.log
                echo Downloading... | tee -a work.log
                you-get -c cookies.sqlite $link 2>&1 | tee -a cache.info | tee -a work.log
            else
                echo 未检测到 cookies.sqlite,将不使用 cookies.sqlite | tee -a work.log
                echo Downloading... | tee -a work.log
                you-get $link 2>&1 | tee -a cache.info | tee -a work.log
            fi

            echo Sleeping... | tee -a work.log
            tcnt=""
            for ((tcnti=0;tcnti<30;tcnti++))
            do
               printf "[%-30s] %d/30 seconds\r" "$tcnt" "$tcnti" | tee -a work.log
               tcnt+="#"
               sleep 1
            done

            if [ "$(cat cache.info | grep -Eo "\[error\]")"x = "[error]"x ]; then
                if [ $cnt -eq 4 ]; then
                    echo Error! $link 下载失败 | tee -a work.log
                    echo $link >> Failed.list                    
                else
                    echo 下载 $link 错误,将重试 | tee -a work.log
                fi
            else
                break
            fi
        done
    done

done

# 转码
echo 尝试转码 | tee -a work.log
ls > cache.txt
list=$(cat cache.txt | grep ".mp4")
rm -f cache.txt

OLD_IFS="$IFS"
IFS="
"
list=($list)
# IFS="$OLD_IFS"

echo 获取 mp4 文件列表完成 | tee -a work.log
for fileName in ${list[@]}
do
    echo $fileName | tee -a work.log
done

for fileName in ${list[@]}
do
    echo ffmpeg -i $fileName -vcodec h264_qsv cache.mp4 | tee -a work.log
    ffmpeg -i $fileName -vcodec h264_qsv cache.mp4 | tee -a work.log
    echo rm -f $fileName | tee -a work.log
    rm -f $fileName | tee -a work.log
    echo mv cache.mp4 "$fileName" | tee -a work.log
    mv cache.mp4 "$fileName" | tee -a work.log
done


# 归类
echo 尝试整理文件 | tee -a work.log

ls > cache.txt
list=$(cat cache.txt)
rm -f cache.txt
list=($list)

for i in ${name_list[@]}
do
    echo 归类 $i 的所有文件 | tee -a work.log
    if [ -d "$i" ]; then
        echo 目录 $i 已存在,后果自负 | tee -a work.log
    else
        mkdir $i
    fi
    for fileName in ${list[@]}
    do
        if [ "$(echo $fileName | grep -Eo "^$i[:|:]" | sed "s/[:|:]$//" )"x = "$i"x ] && [ "$fileName"x != "$i"x ]; then
            echo $i  :  $fileName | tee -a work.log
            mv $fileName $i/
        fi
    done
    echo 压缩文件夹 | tee -a work.log
    zip -r -1 -P $zippasswd ./$i.zip $i | tee -a work.log 2>&1
    if [ -f "$i.zip" ]; then
        echo 看起来压缩成功了 | tee -a work.log
    else
        echo E:看起来压缩失败了 | tee -a work.log
    fi
    echo | tee -a work.log
done
IFS="$OLD_IFS"

注意

目录的大小写

在 windows 桌面创建的文件默认在 Desktop 目录下,但是 linux 的 pwd 变量有时不能识别大写的,所以最好创建在小写的目录下,例如某一个磁盘的根目录。

sh 文件的空格处理

如果在传入参数的时候使用的类似于 ffmpeg.exe -i 123 321.mp4 output.mp4 则不能处理空格,但是如果修改为

fileName="123 321.mp4"
ffmpeg.exe -i $fileName output.mp4

则可以自行处理空格,不用转义,转义了反而有可能出错

if

比较的如果是数字:
eq 等于
lt 小于
gt 大于
le 小于等于
ge 大于等于
ne 不等于

比较字符串时等号两边要有空格。

检测是否存在:
-e 无论文件夹或者文件
-f 文件是否存在
-d 目录是否存在

ToDo

  • log 文件
  • 参数调用
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇