centos7指定目录上传到google云盘

from datetime import datetime, timedelta
from concurrent.futures import ThreadPoolExecutor
import os,time,subprocess,tracebackdef run_cmd(command):"""运行命令并返回输出。"""shell = Trueprint('command',command)result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=shell)if result.returncode != 0:print('err command',command)raise Exception("Command failed: ", result.stderr)return str(result)def run_command(command):"""运行命令并返回输出。"""result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)# print('command',command)# print(result)# if result.returncode != 0:#     print('err command',command)#     raise Exception("Command failed: ", result.stderr)return result.stdoutdef check_folder_exists_in_gdrive(folder_name, parent_id):"""检查给定名称的文件夹在Google Drive中是否存在,如果存在则返回其ID."""# 列出所有匹配名称的文件夹query = f"'{parent_id}' in parents and mimeType='application/vnd.google-apps.folder' and name='{folder_name}' and trashed=false"command = ['/usr/local/bin/gdrive', 'files', 'list', '--query', query, '--skip-header', '--max', '1']try:output = run_command(command)except:return None# 解析命令输出lines = output.strip().split('\n')if lines and lines[0]:# 假设输出格式是: id namefolder_id = lines[0].split(' ')[0]return folder_idreturn Nonedef create_folder_in_gdrive(folder_name, parent_id):"""在Google Drive中创建一个文件夹,返回新创建的文件夹的ID."""command = ['/usr/local/bin/gdrive', 'files', 'mkdir', '--parent', parent_id, folder_name]output = run_command(command)# 解析命令输出lines = output.strip().split('\n')# print("lines",lines)if lines and f"Created directory '{folder_name}' with id" in lines[0]:# 假设输出格式是: Directory <id> created in parent <parent_id>folder_id = lines[0].split(': ')[1]return folder_idelse:raise Exception("Failed to create directory")# 这个函数会在Google Drive中创建相应的文件夹结构,并返回最后一个文件夹的ID
def create_remote_folder_structure(remote_path):# 分割路径为单独的部分folders = remote_path.split(os.sep)parent_id = 'root'  # 假设从Drive的根目录开始创建# folders.insert(0,'l2_data')# print('folders',folders)for folder in folders:# 检查该文件夹是否已经在Google Drive中存在existing_folder_id = check_folder_exists_in_gdrive(folder, parent_id)if existing_folder_id:# 如果文件夹已经存在,则下一次循环使用该ID作为父IDparent_id = existing_folder_idelse:# 如果文件夹不存在,则创建它,并使用新ID作为父IDparent_id = create_folder_in_gdrive(folder, parent_id)# 返回最终文件夹的IDreturn parent_iddef upload(local_path,remote_path):if(os.path.isdir(local_path)):for root, dirs, files in os.walk(local_path):for file in files:local_file_path = os.path.join(root, file)relative_path = os.path.relpath(local_file_path, local_path)gdrive_folder_path = os.path.dirname(relative_path)remote_dir = os.path.join(remote_path,local_path.rstrip('/').split('/')[-1],gdrive_folder_path).rstrip('/')print('开始上传:',local_file_path,remote_dir,int(time.time()))folder_id = create_remote_folder_structure(remote_dir)cmd = ['/usr/local/bin/gdrive', 'files', 'upload', '--parent', folder_id, local_file_path]ustatus = run_command(cmd)if('successfully uploaded' in ustatus):print('上传成功',int(time.time()))else:print('上传失败',int(time.time()))elif(os.path.isfile(local_path)):passupload(lpath,rpath)

需要安装gdrive客户端

centos7服务器上的文件上传到谷歌云盘(google drive)_centos上传谷歌-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_37500838/article/details/134980993?spm=1001.2014.3001.5502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解密 ARMS 持续剖析:如何用一个全新视角洞察应用的性能瓶颈?

作者&#xff1a;饶子昊、杨龙 应用复杂度提升&#xff0c;根因定位困难重重 随着软件技术发展迭代&#xff0c;很多企业软件系统也逐步从单体应用向云原生微服务架构演进&#xff0c;一方面让应用实现高并发、易扩展、开发敏捷度高等效果&#xff0c;但另外一方面也让软件应…

[leetcode] 30. 串联所有单词的子串

文章目录 题目描述解题方法滑动窗口java代码复杂度分析 题目描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab"…

【芯片设计- RTL 数字逻辑设计入门 10 -- 奇偶校验实现】

文章目录 奇偶校验单目运算符&#xff08;|,^,&&#xff09;verilog codeverilog codetestbench code 问题总结 奇偶校验 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果。 实际上这里做的是奇偶检测&#xff0c;如果是奇数个 1 则结果为 1&#xff0c;使用…

C#入门详解_01_课程简介、C#语言简介、开发环境和学习资料的准备

文章目录 1. 课程简介2. C#语言简介3.开发环境与学习资料 1. 课程简介 开设本课程的目的 传播C#开发的知识&#xff0c;让更多的人有机会接触到软件开发行业引导有兴趣或者想转行的朋友进入软件开发行业 课程内容 完整讲述C#语言在实际软件开发中的应用采用知识讲述加实例程序…

VR视频编辑解决方案,全新视频内容创作方式

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正逐渐成为各个领域的创新力量。而美摄科技&#xff0c;作为VR技术的引领者&#xff0c;特别推出了一套全新的VR视频编辑方案&#xff0c;为企业提供了一个全新的视频内容创作方式。 美摄科技的VR视频编…

8.0 Zookeeper 四字命令教程详解

zookeeper 支持某些特定的四字命令与其交互&#xff0c;用户获取 zookeeper 服务的当前状态及相关信息&#xff0c;用户在客户端可以通过 telenet 或者 nc&#xff08;netcat&#xff09; 向 zookeeper 提交相应的命令。 安装 nc 命令&#xff1a; $ yum install nc …

Linux命令-atrm命令(删除待执行任务队列中的指定任务)

说明 atrm命令 用于删除待执行任务队列中的指定任务。 语法 atrm(选项)(参数)选项 -V&#xff1a;显示版本号参数 任务号&#xff1a;指定待执行队列中要删除的任务 示例 删除已经排队的任务 # 显示当前已经设置的任务 atq 2 Mon May 17 08:00:00 2010 a root 1 Sat May…

OpenAI Gym高级教程——解决实际问题与研究探索

Python中的OpenAI Gym高级教程&#xff1a;解决实际问题与研究探索 导言 OpenAI Gym是一个强化学习的标准工具包&#xff0c;可用于解决各种实际问题和进行研究探索。本教程将深入探讨如何利用OpenAI Gym解决实际问题&#xff0c;并进行相关研究。我们将使用代码示例来说明这…

thinkphp6入门(19)-- 中间件向控制器传参

可以通过给请求对象赋值的方式传参给控制器&#xff08;或者其它地方&#xff09;&#xff0c;例如 <?phpnamespace app\middleware;class Hello {public function handle($request, \Closure $next){$request->hello ThinkPHP;return $next($request);} } 然后在控制…

改进神经网络

Improve NN 文章目录 Improve NNtrain/dev/test setBias/Variancebasic recipeRegularizationLogistic RegressionNeural networkother ways optimization problemNormalizing inputsvanishing/exploding gradientsweight initializegradient checkNumerical approximationgrad…

python flask 魔术方法

魔术方法作用_init_对象的初始化方法_class_返回对象所属的类_module_返回类所在的模块_mro_返回类的调用顺序&#xff0c;可以找到其父类&#xff08;用于找父类&#xff09;_base_获取类的直接父类&#xff08;用于找父类&#xff09;_bases_获取父类的元组&#xff0c;按它们…

Adaptec RAID 控制器arcconf 管理命令的常见的查询操作

ARCCONF命令行工具可以在服务器正常运行过程中对Adaptec RAID卡进行带内在线查询配置操作&#xff0c;无需重启服务器&#xff0c;十分方便快捷&#xff0c;本文讲解常见的查询操作。 一、查询流程 二、常见指令 1、查询已安装的RAID卡清单 [rootlocalhost ~]# ./arcconf-lin…

CGAL::2D Arrangements-5

5.Arrangement无界曲线 前几章中构建和操作的所有Arrangement都只由线段引起&#xff0c;线段尤其是有界曲线。这样的Arrangement总是具有一个包含所有其他Arrangement特征的unbounded face。在本节中&#xff0c;我们将解释如何构造无界曲线的Arrangement。为了简化说明&…

edge浏览器无法显示latex公式

1&#xff09;从镜像下载 https://hub.nuaa.cf/emichael/texthings/archive/refs/tags/v1.1.5.zip TeX All the Things插件压缩包&#xff08;目前最新版是1.1.5版&#xff09; 2&#xff09;下载到本地后解压为文件夹 3&#xff09;打开edge浏览器管理扩展页面&#xff0c…

DolphinScheduler本地安装

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

【Web - 框架 - Vue】随笔 - 通过`CDN`的方式使用`VUE 2.0`和`Element UI`

通过CDN的方式使用VUE 2.0和Element UI VUE 网址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源码 https://download.csdn.net/download/HIGK_365/88815507测试 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

储氢材料行业调研:市场需求将不断增长

近年来&#xff0c;热度持续升温的碳中和、碳达峰话题&#xff0c;使得氢能及其相关产业被高度关注&#xff0c;而决定氢能应用关键的是安全、高效的氢能储运技术。在氢能需求不断增长的情况下&#xff0c;储氢材料行业是市场也将不断发展。在氢能需求不断增长的情况下,储氢材料…

如何实现Vuex本地存储

在前端开发中&#xff0c;Vuex是一款非常强大的状态管理工具&#xff0c;但是默认情况下&#xff0c;Vuex的数据是存储在内存中的&#xff0c;刷新页面后数据将会丢失。这往往会导致用户在刷新页面后需要重新登录等繁琐的操作。本篇文章将教会您如何实现Vuex的本地存储&#xf…

从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

一、创建项目 1、首先创建一个maven项目&#xff0c;pom文件如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

【JavaEE Spring】Spring 原理

Spring 原理 1. Bean的作⽤域1.1 概念1.2 Bean的作⽤域 2. Bean的⽣命周期 1. Bean的作⽤域 1.1 概念 在Spring IoC&DI阶段, 我们学习了Spring是如何帮助我们管理对象的. 通过 Controller , Service , Repository , Component , Configuration ,Bean 来声明Bean对象。通…