让gpt写了个qbittorrent下载完成后自动上传百度网盘的脚本

脚本是gpt-4o写的,虽然还有优化空间,但整体可用,我也就没再折腾。 有闲情的大佬可以再优化下。 具体功能是: qbittorrent下载完成后调用BaiduPCS-Go上传到百度网盘,之前论坛里有rclone上传的脚本,不过微软网盘给的小气。还是百度就很大,就是会吃某些视频,懂得都懂,至于存什么。哎嘿~。 目前脚本已知bug: 1.会出现某些任务路径非法的提示,目测是BaiduPCS-Go的问题,暂时不知道怎么解决。 2.日志文件有点乱,反正能看。 3.没有上传完成后自动删除功能。(因为可能会因为上传出现上传失败的问题,所以种子留下了,等待人工效验。反正我是会大概看一下有没有上传失败的。) 运行命令是bash /downloads/up.sh “%F”  “<目标文件夹>” 使用方法: 上传脚本然后 qbittorrent设置-》启用“torrent 完成时运行外部程序”->输入“bash /downloads/up.sh “%F”  “<目标文件夹>“”->保存 <目标文件夹>替换为实际路径,注意用双引号保持数据完整性。 其他的,代码里面注释很多,自己看着改应该没问题吧? #!/bin/bash # 定义一些全局变量 LOCK_FILE=”/downloads/upload_script.lock” QUEUE_FILE=”/downloads/upload_queue.txt” LOG_FILE=”/downloads/upload_log.txt” ERROR_LOG_FILE=”/downloads/upload_error_log.txt” CACHE_FILE=”/downloads/upload_cache.txt” BAIDUPCS_GO_LOG=”/downloads/BAIDUPCS-GO_LOG.txt” # 记录日志的函数 log() {     echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” >> $LOG_FILE } # 记录带时间戳的日志到 BAIDUPCS_GO_LOG log_to_baidupcs_log() {     echo “$(date +”%Y-%m-%d %H:%M:%S”) – $1″ >> “$BAIDUPCS_GO_LOG” } # 记录错误日志的函数 error_log() {     local error_message=”$1″     local error_task=”$2″     local error_step=”$3″     local error_action=”$4″     echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – Task: ${error_task}, Step: ${error_step}, Error: ${error_message}, Action: ${error_action}” >> $ERROR_LOG_FILE } # 添加任务到队列的函数 add_to_queue() {     local task=”$1″     local path=”$2″     echo “”${task}” “${path}”” >> $QUEUE_FILE } # 读取队列并缓存的函数 load_cache() {     if [ -f $QUEUE_FILE ]; then         cat $QUEUE_FILE > $CACHE_FILE         > $QUEUE_FILE     fi } # 执行上传任务的函数 execute_tasks() {     while [ -s $CACHE_FILE ]; do         local line=$(head -n 1 $CACHE_FILE)         local task=$(echo $line | awk -F” ‘{print $2}’)         local dest_path=$(echo $line | awk -F” ‘{print $4}’)                  log “开始上传 ${task} 到网盘 ${dest_path} 目录”                  # 执行上传任务 并将运行结果记录到BAIDUPCS-GO_LOG.txt当中         # /downloads/BaiduPCS-Go 为BaiduPCS-Go的绝对路径         /downloads/BaiduPCS-Go upload “${task}” “${dest_path}” 2>&1 | while IFS= read -r line; do log_to_baidupcs_log “$line”; done                           #这里只记录BaiduPCS-Go最后一次的运行结果。         #所以对于文件夹,也是记录最后一个上传信息,详细的上传日志还得去BAIDUPCS_GO_LOG看         # 检查日志文件中是否包含“文件路径含有非法字符,已跳过!”         if grep -q “文件路径含有非法字符,已跳过!” “$BAIDUPCS_GO_LOG”; then             local skip_message=$(grep “文件路径含有非法字符,已跳过!” “$BAIDUPCS_GO_LOG” | tail -n 1)             log “$skip_message”         fi                  # 检查日志文件中是否包含上传成功的提示信息         if grep -q “上传文件成功, 保存到网盘路径:” “$BAIDUPCS_GO_LOG”; then             local success_message=$(grep “上传文件成功, 保存到网盘路径:” “$BAIDUPCS_GO_LOG” | tail -n 1)             log “$success_message”         fi                  log “${task} 上传完成”                  # 移除已完成任务         sed -i ‘1d’ $CACHE_FILE     done } # 处理队列的函数 process_queue() {     load_cache         while [ -s $CACHE_FILE ]; do         execute_tasks         load_cache     done         rm -f $CACHE_FILE } # 主函数 main() {     if [ $# -ne 2 ]; then         echo “Usage: $0 ”         exit 1     fi     local task=”$1″     local dest_path=”$2″         # 尝试获取锁     exec 200>$LOCK_FILE     flock -n 200     if [ $? -ne 0 ]; then         error_log “Failed to acquire lock” “$task” “Acquiring lock” “Adding task to queue”         add_to_queue “$task” “$dest_path”         exit 0     fi     # 如果获取到了锁,处理任务     if [ -f $QUEUE_FILE ]; then         add_to_queue “$task” “$dest_path”     else         echo “”${task}” “${dest_path}”” > $QUEUE_FILE     fi     process_queue     release_lock     if [ -f $QUEUE_FILE ]; then         rm -f $QUEUE_FILE     fi } release_lock() {     flock -u 200     rm -f $LOCK_FILE } main “$@” 复制代码

请登录后发表评论

    没有回复内容