精华内容
下载资源
问答
  • u盘自动拷贝
    2020-11-28 13:02:08

    0x00 需要用到的库OS:OS库提供了使用各种操作系统功能的接口。主要有对目录或者文件的新建,删除,查看文件属性,还提供了对文件以及目录的路径操作。

    shutil:对文件提供了移动,复制,打包,压缩等功能,这里主要用到复制功能。

    time: 时间处理的库,在这里用来程序休眠的时间。

    0x01 程序设计思路

    我们需要每隔一段时间检查是否有u盘插入,如果检测到有u盘,则将u盘的内容全部拷贝到本机的指定文件夹。

    0x02 最简单模式编程实现1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14import os

    import time

    import shutil

    USB = 'D:\\' # u盘目录

    SAVE = 'C:\\Users\Leticia\Desktop\copy' # 保存目录

    def usbcopy():

    shutil.copytree(USB, SAVE)

    def main():

    while (1):

    if os.path.exists(USB):

    usbcopy()

    time.sleep(200) # 休眠时间

    main()

    此程序中,USB变量是u盘目录,根据个人电脑来填写,SAVE变量是将拷贝出来的文件保存的目录,time.sleep(200)代表每次判断完之后休眠200秒。

    此时测试程序已经可以自动拷贝了,但是还存在一些问题,比如我们已经拷贝完成了,然后休眠完成之后u盘没有拔,这个时候会重新复制一遍。但是我们如果写成检测到u盘,拷贝一遍程序就停止运行,那么u盘内容发生变化我们要怎么做,所以我们还要加几个功能。

    0x03 增加检测变化模块的编程实现1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34import os

    import time

    import shutil

    from os.path import join,getsize

    USB = 'D:\\' # u盘目录

    SAVE = 'C:\\Users\Leticia\Desktop\copy' # 保存目录

    def getdirsize(dir):

    size=0

    for root,dirs,files in os.walk(dir):

    size+=sum([getsize(join(root,name)) for name in files])

    print(size)

    return size

    def usbcopy():

    shutil.copytree(USB, SAVE)

    def main():

    old_dirsize = 0

    new_dirsize = 0

    while (1):

    if os.path.exists(USB):

    print("检测到U盘")

    new_dirsize = getdirsize(USB)

    if old_dirsize != new_dirsize:

    usbcopy()

    old_dirsize = new_dirsize

    else:

    print("没有变化")

    else:

    print("暂时没有U盘")

    print("开始休眠")

    time.sleep(5) # 休眠时间

    print("休眠结束")

    main()

    这里我们新加了一个getdirsize函数来遍历u盘文件并统计总大小,然后如果总大小改变,则拷贝,如果没变,就不重新拷贝。

    这样就解决了文件更新的问题,根据下图print的提示我们可以看到大概的工作流程。

    0x04 其他

    如果这样还觉得不方便的话,在这里再提供一个vbs的拷贝小脚本,同样能达到我们的功能,在txt中输入如下代码,然后根据个人路径稍作更改,然后讲后缀改成vbs,双击运行,就可以在后台自动拷贝了。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11set fso=createobject("scripting.filesystemobject")

    set ws=createobject("wscript.shell")

    on error resume next

    do

    wscript.sleep 1000

    if fso.driveexists("D:") then

    fso.copyfile "D:*","C:\Users\Leticia\Desktop\copy"

    fso.copyfolder "D:*","C:\Users\Leticia\Desktop\copy"

    wscript.sleep 20000

    end if

    loop

    更多相关内容
  • 优盘自动拷贝专家解放您的双手,优盘、数码相机拷贝革命从优盘自动拷贝专家开始。优盘自动拷贝专家是至尊软件工作室开发的共享软件。 优盘自动拷贝专家能自动将插到你计算机的任何类型的优盘或者数码照相机的文件...
  • U盘自动拷贝

    2014-03-08 10:50:25
    javaU盘自动拷贝 采用的就是是:java的IO的的重点知识
  • 可以自动后台拷贝,只要运行一次,就可以开机自动启动,还具有把拷贝的内容自动回拷的U盘。我添加这个功能作用是,我在实际应用中遇到,一般想用这个的都是想搞点别人的东西,但是你如果一次操作别人电脑时被发现了...
  • 优盘自动拷贝

    2012-12-06 10:33:14
    优盘自动拷贝工具,程序运行以后,会自动拷贝优盘内容到电脑硬盘上。详细说明见readme文件。
  • U盘内容不知不觉中自动拷贝在电脑上,注意放在C盘下运行,U盘内的内容保存在D/CPPY目录下
  • u盘自动拷贝

    2012-12-10 19:26:05
    插入U盘后,U盘的内容将自动拷贝,开机程序自动隐藏运行
  • U盘自动拷贝工具

    2018-10-29 10:42:47
    U盘自动拷贝工具,拖动文件,或者输入地址,就能将文件写入刚插进的U盘内
  • 优盘自动拷贝专家+V1.3+破解版

    热门讨论 2011-02-11 22:00:13
    优盘自动拷贝专家是至尊软件工作室开发的共享软件。 优盘自动拷贝专家能自动将插到你计算机的任何类型的优盘或者数码照相机的文件复制到指定的文件夹。程序可以隐藏运行,全自动高速复制。优盘一插入计算机USB口就...
  • U盘自动拷贝工具专家

    2009-12-29 12:03:46
    可以自动拷贝u盘内容 自动识别u盘 u盘链上电脑就可以自动开始拷贝全部内容或者部分指定格式的内容 非常实用的一个工具
  • Linux系统U盘自动识别与文件拷贝程序源码
  • 程序后台运行,当有u盘插入电脑,自动在后台将u盘内容拷贝到电脑C盘。
  • U盘插入电脑时,就能悄悄的将U盘上的所有文件拷贝到电脑里,神不知鬼不觉,至于有什么作用,各自发挥,但是千万别拿来做非法的事情,否则后果自负。。。 业界良心的好东西!绝对无病毒木马及后门!本人亲自开发,...
  • 优盘自动拷贝专家能自动将插到你计算机的任何类型的优盘或者数码照相机的文件复制到指定的文件夹。程序可以隐藏运行,全自动高速复制。优盘一插入计算机USB口就自动复制,让您充分享受零等待的快感!优盘自动拷贝...
  • 以前在学校上电脑课的时候总是馋老师U盘的身子,心想要是能把他里面的的课件拷贝下来就好了。不仅看得清楚还能省下拍PPT再抄到书上的麻烦,于是乎他来了。 这个拷贝软件打包以后可以完全静谧拷贝,不需要人工干预...

            以前在学校上电脑课的时候总是馋老师U盘的身子,心想要是能把他里面的的课件拷贝下来就好了。不仅看得清楚还能省下拍PPT再抄到书上的麻烦,于是乎他来了。

            这个拷贝软件打包以后可以完全静谧拷贝,不需要人工干预也可以在代码内部改变需要拷贝的文件类型。最重要的是可以把其原本的文件夹格式也拷贝下来,这样就算有复数的同名文件也完全不怕了。

            ok上代码!

    
    import os,time
    
    def makelist_first(srlj):#第一个判断函数 (此函数用于源输入为磁盘根目录情况下)
        wjml=os.listdir(srlj)#生成输入文件夹路径下的所有文件数列
        listwjjlj=[]#生成筛选后文件夹得保存数列
        for i in wjml:
            if os.path.isdir(srlj+i):#判断是不是文件夹
                print(srlj+i)
                listwjjlj.append(srlj+i)#添加文件夹路径到数列,准备下一步排查
            else:
                wjlj=srlj#构建文件绝对路径
                gmlwjjx(i,wjlj)#调用判断函数
        return listwjjlj#输出一个全是文件夹绝对路径
    
    def makelist2(srlj):#第二个判断函数(用于子文件夹的排查)
        wjml=os.listdir(srlj)#生成输入文件夹路径下的所有文件数列
        listwjjlj=[]#生成筛选后文件夹得保存数列
        for i in wjml:
            if os.path.isdir(srlj+"\\"+i):#判断是不是文件夹
                listwjjlj.append(srlj+"\\"+i)#添加文件夹路径到数列,准备下一步排查
                print(srlj+"\\"+i)
            else:
                wjlj=srlj#构建文件绝对路径
                gmlwjjx(i,wjlj)#调用判断是否是必要文件函数 输入文件名和路径两个参数
        return listwjjlj#输出一个全是文件夹绝对路径
    
    def xh(listwjjlj):#循环函数
        for s in listwjjlj:#第一层文件夹
            cen1=makelist2(s)
            for ss in cen1:#第二层文件夹
                cen2 = makelist2(ss)
                for sss in cen2:#第三层文件夹
                    cen3 = makelist2(sss)
                    for ssss in cen3:#第四层文件夹
                        cen4 = makelist2(ssss)
                        for sssss in cen4:#第五层文件夹
                            cen5 = makelist2(sssss)
                            for ssssss in cen5:  # 第五层文件夹
                                makelist2(ssssss)
    
    #根目录解析函数解析本目录文件是否为目标文件,输出一个数列每一个元素均为元祖属性有两种 文件名称和其目录
    def gmlwjjx(gmllist,wjlj):#输入文件名
            desc = {}
            hzm=gmllist.split('.')[-1]#解析后缀名
            if hzm=='xlsx'or hzm=='word'or hzm=='ppt'or hzm=='pdf'or hzm=='xps'\
                    or hzm=='xls'or hzm=='xlsm'\
                    or hzm=='pptx'or hzm=='pptm'\
                    or hzm=='docx'or hzm=='doc'or hzm=='dot'or hzm=='dots':
                desc["wj_name"]=gmllist#字典加入name属性
                desc["wj_address"] = wjlj#字典加入地址属性
                xzhs(gmllist,wjlj)
    
    def xzhs(name_file,name_address):#下载函数
        print(name_address)
        ywj = name_address+ "/"+name_file#源文件绝对路径
        name_address=name_address[3:]
        os.makedirs(f"D:\\腾讯超级驱动大师\\驱动备份\\备份文件\\{time_file}\\{name_address}")#创建相对应的文件夹
        xwj =f"D:\\腾讯超级驱动大师\\驱动备份\\备份文件\\{time_file}"+"\\"+name_address+"\\"+name_file
        #print("源文件地址",ywj)
        #print("新文件地址", xwj)
        with open(ywj,"rb")as f:
            data=f.read()#此项为读取源文件
            with open(xwj, "wb") as f2:
                f2.write(data)#此项为写入新文件
                f2.close()
            f.close()
    
    if __name__=="__main__":
        print("启动完成")
        ex = 5
        while True:
                if os.path.exists("G:\\"):  # 判断是否插入了U盘是否存在
                    print("检测到U盘差插入")
                    if ex==5:
                        biglist=[]#注意是全局变量,参数循环会累加
                        time_file=time.strftime("%Y年%m月%d——%H点%M分%S秒插入")#确定插入时间
                        os.makedirs(f"D:\\腾讯超级驱动大师\\驱动备份\\备份文件\\{time_file}")#创建备份目录
                        print("时间文件夹创建完成")
                        xh(makelist_first("G:\\"))#从根目录要用1号函数
                        ex = 0
                        print("拷贝完成")
                else:
                    ex=5
                time.sleep(2)#每两秒扫描一次电脑硬盘
    
    
    
    

    基本原理很简单,先观察U盘的盘符我这里是G: 然后让程序每两秒进行问询,目录存在就进行检索拷贝。默认的存档地址是:

    D:\腾讯超级驱动大师\驱动备份\备份文件

    大家可以根据自己需要修改。

    最后再加了个无限循环,避免无限复制同一个u盘文件。

    就ok了!

    
                                            
    展开全文
  • java版U盘自动拷贝工具,附带可用版和源码 主要用于学习制作双击运行的java程序和一些BAT的技巧
  • U盘自动拷贝(VB.net)

    2009-04-26 01:16:48
    能检测多个U盘的插入,并偷偷地将U盘内容拷贝到"C:\U盘自动拷贝目的地\"下.
  • Python 这门语言有非常多有趣的内容,比如给微信好友自动发消息、查看微信好友撤回的消息、通过微信控制电脑等等。在我公众号上也分享过很多有趣的程序,近期我会去搜集一些骚操作的 Python 程序分享给大家,并命名...

    阅读文本大概需要 6 分钟。

    Python 这门语言有非常多有趣的内容,比如给微信好友自动发消息、查看微信好友撤回的消息、通过微信控制电脑等等。在我公众号上也分享过很多有趣的程序,近期我会去搜集一些骚操作的 Python 程序分享给大家,并命名「Python 骚操作」专栏,持续更新!文中一些程序可能来自别人的文章,但如果我觉得程序还有所改进的地方,我会继续添加一些代码,并且我会在文末标注原程序出处。

    今天的「Python 骚操作」,分享的是一个自动拷贝电脑 U 盘内容的程序。当别人的 U 盘插入到你的电脑上时,Python 脚本会自动把 U 盘所有的内容,全部拷贝到你的电脑上。脚本每隔 5 秒扫描当前电脑是否有 U 盘插入,如果是已拷贝过的内容,则不会重复拷贝,每个相应的操作都会记录到日志文件中。

    如果恰好这个 U 盘里有某些室友的「学习视频」,比如下的图片。

    那骚气指数 10 颗星!

    注意此程序只是用来学习交流,切勿违法使用。

    Python 骚思路

    在 windows 系统中,当有 U 盘插入到你的电脑上时,会给它分配一个磁盘名称,比如在我的电脑上分配的是「J」。所以我会先定义一个「USB_FILE」变量,表示 U 盘所在的目录。

    我们利用 os 库来判断当前系统是否有「USB_FILE」,如果扫描到当前系统有这个目录,说明有 U 盘插入到当前电脑上。随后我们通过 shutil 库,把 U 盘里的内容全部拷贝到自己的电脑上。在每个操作之间我添加了 input_log() 方法,用来把当前相应的操作记录到日志文件中。

    Python 骚源码

    程序主要是由三个函数组成,get_dirs_size()、main()、input_log()。

    get_dirs_size()

    get_dirs_size() 主要是返回要拷贝 U 盘的长度,用来判断当前要拷贝的内容是否已经重复,如果重复则无需重新拷贝。

    def get_dirs_size(dir):

    size = 0

    for root, dirs, files in os.walk(dir):

    size += sum([getsize(join(root, name)) for name in files])

    print(size)

    return size

    main()

    main() 用来执行主逻辑代码,即每隔 5 秒检查当前电脑是否有 U 盘插入。如果检查到,则记录当前 U 盘的长度。在下一次检测的时候,如果当前的长度没有发生变化,则无需重新拷贝。每个操作都会记录到日志中,以便日后查看相应的拷贝信息。

    def main():

    old_size = 0

    new_dirsize = 0

    while(1):

    if os.path.exists(USB_PATH):

    print("检测到 U 盘")

    input_log("检测到 U 盘")

    new_dirsize = get_dirs_size(USB_PATH)

    if old_size != new_dirsize:

    for filename in os.listdir(USB_PATH):

    print("拷贝了:" + filename)

    input_log("拷贝了:" + filename)

    shutil.copytree(USB_PATH, SAVE_PATH)

    old_size = new_dirsize

    else:

    print("U 盘没有变化")

    input_log("U 盘没有变化")

    else:

    print("暂时没有 U 判断")

    print("开始休眠")

    input_log("开始休眠")

    sleep(5)

    print("休眠结束,重新检测")

    input_log("休眠结束,重新检测")

    input_log() 利用 logging 库,来把相应的操作信息保存到一个日志文件中。

    def input_log(message):

    handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1024 * 1024, backupCount=5,

    encoding='utf-8')  # 实例化handler

    fmt = '%(asctime)s - %(levelname)s - %(message)s'

    formatter = logging.Formatter(fmt)  # 实例化formatter

    handler.setFormatter(formatter)  # 为handler添加formatter

    logger = logging.getLogger('tst')  # 获取名为tst的logger

    logger.addHandler(handler)  # 为logger添加handler

    logger.setLevel(logging.DEBUG)

    logger.info(message)

    Python 骚教程

    此次的程序使用非常简单,首先下载源码,后台回复「拷贝」即可获取源码。然后修改下 USB_PATH 和 SAVE_PATH,这两个参数表示的是你 U 盘所属的位置和你想要保存的目录。

    LOG_FILE = "test.log"

    USB_PATH = "J:\\"

    SAVE_PATH = "D:\\disk_copy"

    原程序参考来源:

    本文首发于公众号「痴海」,后台回复「1024」即可获取最新编程资源。

    展开全文
  • 自动拷贝U盘安装程序

    2011-11-22 09:16:18
    自动拷贝U盘安装程序自动拷贝U盘安装程序自动拷贝U盘安装程序
  • 内容索引:VC/C++源码,系统相关,U盘,USB VC++后台自动拷贝U盘文件源代码,的无声无息中将U盘中的文件拷贝至所选目录中,俗称U盘大盗,挺历害的程序。程序功能不赞成大家这么用,不过通过这个程序我们能掌握一些vc++...
  • +++U盘自动拷贝工具{U盘自动拷贝工具U盘上的文件到指定的目录} 【Fastcopy V2.02 汉化版】
  • U盘后台自动拷贝文件工具是一款U盘后台自动拷贝复制工具,软件可进行后台操作,不打扰用户正在执行的工作进程,让用户可以在拷贝U盘内文件的同时,进行其它操作,为用户提供了一个非常方便和简单的方法,此外软件,会...
  • U盘拷贝自动检测U盘驱动盘符,将文件拷至电脑硬盘。拷文件无显示,后台运行。 一、软件安装后,自动注册为启动项。 二、软件最小化后,右下角,禁止弹出界面,可以退出。 三、注册后,启动自动最小化,右下角,...
  • 实现将指定的目录或文件,批量拷贝到接入的所有U盘内(可指定过滤U盘盘符),使用python脚本编写,内置使用手册。
  • 后台自动拷贝U盘文件

    2017-07-16 13:10:31
    后台自动拷贝U盘文件,可以无声无息中将U盘中的文件拷贝至所选目录中, 俗称U盘大盗,挺历害的程序。程序功能不赞成大家这么用, 当有监控的U盘的插入电脑时,软件会自动拷贝文件,程序运行后没有主窗口, 也不...
  • Linux 自动拷贝U盘数据至服务器并发送飞书通知

    业务场景

    公司是做体育测试相关的产品,有大量的现场业务视频要传回公司留存,但是由于现场网络,像素等原因,无法通过公网传输,只能拍摄完成后存入移动硬盘带回公司上传服务器,并上传阿里OSS云存储。


    文章目录


    前言

    我们公司的环境是物理服务器上搭建的KVM,创建的Centos7虚拟机。(公司比较穷得会过日子)

    本项目需要安装一些插件,请自行安装。插件有:Ansible、Python3.7、Expect


    一、项目流程

    因为虚拟机不能直接识别物理机的USB设备,所以我们要把U盘从物理机挂载到虚拟机上,我们还要创建相应的设备文件给虚拟机,让他可以识别USB设备。从而实现后面一系列的自动操作,大体流程如下:

    USB设备插入物理服务器   →  检测有设备接入挂载到虚拟机  →  拷贝数据到虚拟机 → 从虚拟机上传到阿里云OSS

    二、实现步骤

    1.配置环境

    创建飞书机器人(请看我之前的飞书相关文章)

    地址:每天禅道超时任务、超时未开始任务发送飞书提醒_默^默的博客-CSDN博客

    安装cp 命令显示拷贝进度条

    地址:cp命令显示进度条_为Linux的cp和mv命令添加进度条_yi美小能手的博客-CSDN博客

    服务器挂载阿里云OSS存储到服务器(我是挂载到虚拟机)

    地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

    Ansible 跟虚拟机之间进行认证

    命令:ssh-keygen  //生成秘钥   一直回车就行

    将秘钥拷贝到被管理服务器上

    命令:ssh-copy-id  -i ~/.ssh/id_rsa.pub -p 22 user@被管理的服务器IP

    编辑配置文件:vim /etc/ansible/hosts

     验证通信是否完成

    编写yml文件:vim tviewer.yml

    ---
    - hosts: server
      remote_user: root
      tasks:
       - name: Project
         shell: /bin/bash /root/script/mount.sh  # 虚拟机中脚本存放路径自行修改
         register: result
       - debug: var=result
    

    2.编写物理机脚本

    注意所有脚本及文件在同一目录下,本次实验是固有环境,其他环境使用需要改动。

    本次实验脚本路径:/root/script

     

    首先创一个初始状态文件

    echo "当前设备状态: 1" > ./status.txt

    编写监控USB端口脚本

    vim jk_usb.sh

    代码如下(示例):

    #!/bin/bash
    # Monitor USB device
    
    # 检测当前是否有USB设备接入
    # 获取USB端口 idVendor,idProduct
    
    while :
    do
        idven=`awk -F '[,=]' '/New USB device found, idVendor/{print $3}' /var/log/messages | tail -1`
        idpro=`awk -F '[,=]' '/New USB device found, idVendor/{print $5}' /var/log/messages | tail -1`
    
        if [ -z $idven ];then
           echo "未检测到USB接口有U盘接入!"
        else
           echo "\"$idven$idpro\" USB接口有U盘接入!" 
           break
        fi
        sleep 20
    done

    编写传送USB设备文件脚本

    vim monitor_usb.sh

    代码如下(示例):

    #!/bin/bash
    # Monitor USB device
    
    # 创建虚拟机需要的USB设备文件
    if [ ! -f /opt/usb.xml ];then
       touch /opt/usb.xml
       echo -e "<hostdev mode='subsystem' type='usb' managed='yes'>\n\
            <source>\n\
                   <vendor id='0x$idven'/>\n\
                   <product id='0x$idpro'/>\n\
            </source>\n</hostdev>" >/opt/usb.xml
    else
       echo "文件已存在!" >/dev/null
    fi
    
    # 获取USB端口 idVendor,idProduct
    while :
    do
        sh /root/script/jk_usb.sh
        idven=`awk -F '[,=]' '/New USB device found, idVendor/{print $3}' /var/log/messages | tail -1`
        idpro=`awk -F '[,=]' '/New USB device found, idVendor/{print $5}' /var/log/messages | tail -1`
        oldid=`awk -F '[=/x'\'']' '/vendor/{print $4}' /opt/usb.xml`
        oldip=`awk -F '[=/x'\'']' '/product/{print $4}' /opt/usb.xml`
    
        # 检查当前设备使用状态
        cat status.txt | grep "0"
    
        if [ $? -eq 0 ];then
           echo "当前 \"$oldid$oldip\" 设备正在使用中。。。"
        else
           echo "更换设备请稍后。。。"
           # 替换上一次idVendor,idProduct
           cp -r /opt/usb.xml /opt/bak_usb.xml
           sed -i '3 s/'0x$oldid'/'\0x$idven'/g' /opt/usb.xml
           sed -i '4 s/'0x$oldip'/'\0x$idpro'/g' /opt/usb.xml
           # 清空系统日志消息
           cat /dev/null >/var/log/messages
           # 删除上次发送的yml文件
           virsh detach-device dianxin_video /opt/usb.xml >/dev/null
           # 发送到虚拟机设备文件
           virsh attach-device dianxin_video /opt/usb.xml
           #远程登录虚拟机执行脚本
           ansible-playbook /root/script/tviewer.yml
    fi
    sleep 20

    3.编写Python发送脚本

    本地日志提示python脚本

    vim feishugerenlocal_cpg.py

    代码如下(示例):

    #!/usr/bin/python3
    # encoding: utf-8
    import json
    import requests
    import sys
    
    messages = sys.argv[1]
    content = "视频拷贝到本地日志: \n %s" % messages
    
    def gettenant_access_token():
        # 获取应用token
        tokenurl = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
        headers = {"Content-Type": "application/json"}
        data = {
            "app_id": "cli_a1960ffb******", # 飞书应用的ID 
            "app_secret": "121cF*****" # 飞书应用的Secret
        }
        request = requests.post(url=tokenurl, headers=headers, json=data)
        response = json.loads(request.content)['tenant_access_token']
        return response
    
    
    def getuserid(tenant_access_token):
        # 获取User_ID
        mobiles = "18888666664" #个人飞书登录的手机号
        userurl = "https://open.feishu.cn/open-apis/user/v1/batch_get_id?mobiles=%s" % mobiles
        headers = {"Authorization": "Bearer %s" % tenant_access_token}
        request = requests.get(url=userurl, headers=headers)
        response = json.loads(request.content)['data']['mobile_users'][mobiles][0]['user_id']
        print(json.loads(request.content))
        return response
    
    
    def sendmes(user_id, tenant_access_token):
        sendurl = "https://open.feishu.cn/open-apis/message/v4/send/"
        headers = {"Authorization": "Bearer %s" % tenant_access_token, "Content-Type": "application/json"}
    
        # 给个人发送消息
        data = {"user_id": user_id,
                "msg_type": "text",
                "content": {
                    "text": "<at user_id=\"%s\">test</at>\n \n %s" % (user_id, content)
                }
                    }
        requests.post(url=sendurl, headers=headers, json=data)
    
    
    tenant_access_token = gettenant_access_token()
    user_id = getuserid(tenant_access_token)
    sendmes(user_id, tenant_access_token)

    拷贝到OSS存储的日志脚本

    vim feishugerenoss_cpg.py

    代码如下(示例):

    #!/usr/bin/python3
    # encoding: utf-8
    import json
    import requests
    import sys
    
    messages = sys.argv[1]
    content = "视频拷贝到OSS日志: \n %s" % messages
    
    def gettenant_access_token():
        # 获取应用token
        tokenurl = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
        headers = {"Content-Type": "application/json"}
        data = {
            "app_id": "cli_a1960ffb******", # 飞书应用的ID 
            "app_secret": "111CF*****" # 飞书应用的Secret
        }
        request = requests.post(url=tokenurl, headers=headers, json=data)
        response = json.loads(request.content)['tenant_access_token']
        return response
    
    
    def getuserid(tenant_access_token):
        # 获取User_ID
        mobiles = "18888666664" #个人飞书登录的手机号
        userurl = "https://open.feishu.cn/open-apis/user/v1/batch_get_id?mobiles=%s" % mobiles
        headers = {"Authorization": "Bearer %s" % tenant_access_token}
        request = requests.get(url=userurl, headers=headers)
        response = json.loads(request.content)['data']['mobile_users'][mobiles][0]['user_id']
        print(json.loads(request.content))
        return response
    
    
    def sendmes(user_id, tenant_access_token):
        sendurl = "https://open.feishu.cn/open-apis/message/v4/send/"
        headers = {"Authorization": "Bearer %s" % tenant_access_token, "Content-Type": "application/json"}
    
        # 给个人发送消息
        data = {"user_id": user_id,
                "msg_type": "text",
                "content": {
                    "text": "<at user_id=\"%s\">test</at>\n \n %s" % (user_id, content)
                }
                    }
        requests.post(url=sendurl, headers=headers, json=data)
    
    
    tenant_access_token = gettenant_access_token()
    user_id = getuserid(tenant_access_token)
    sendmes(user_id, tenant_access_token)

    4.编写虚拟机脚本

    vim mount.sh

    代码如下(示例):

    #!/bin/bash
    # Mount the USB flash drive and copy it to the specified directory
    # Send flying books when finished
    
    HOST="192.168.168.11" #物理机IP
    USER="root"
    PASSWARD="Yct3****"
    FILE="/root/script/status.txt" #状态文件路径放在物理机脚本同级目录
    TOFILE="/root/script/" #物理机脚本目录
    
    #获取挂载盘
    diskid=`lsblk | awk '{print $1,$4}' | grep -v ^[A-Z] | grep -E 'G|T' | tail -1 | awk -F '[─ ]' '{print $2}'`
    mdir="/dianxin_video"
    
    #先取消一下挂载(不管之前有没有挂载)
    umount /video
    
    #挂载U盘
    mount /dev/$diskid $mdir
    if [ $? = 0 ];then
        echo "挂载成功!" > /root/sh.log
    else
        echo "请检查挂载!" > /root/sh.log
        exit 1
    fi
    
    #创建状态文件传回物理机
    echo "当前设备状态: 0" > /root/script/status.txt
    expect -c "
        spawn scp $FILE  $USER@$HOST:$TOFILE
         expect {
            \"*assword\" {set timeout 300; send \"$PASSWARD\r\"; exp_continue;}
            \"yes/no\" {send \"yes\r\";}
        }
    expect eof"
    
    #查询U盘SN,创建拷贝目录 (通过SN码区别不同的U盘)
    DISKID=`echo  $diskid  | awk  -F  ""  '
    {
       for (i=1;i<=NF;i++) 
       {  
         if  ($i ~ /[[:lower:]]/)         
         {
           str=$i
           str1=(str1 str)
         }  
       } 
       print str1
    }'`
    USBSN=`lsblk -n --nodeps -o name,serial /dev/$DISKID | awk '{print $2}' `
    DIR=`date +%Y%m%d`
    
    if [ ! -d /root/video/$USBSN/$DIR ];then
       mkdir -p  /root/video/$USBSN/$DIR
    else
       echo "目录已存在!" > /root/sh.log
    fi
    
    #拷贝U盘中的文件到本地(指定U盘要拷贝的数据路径,这里是所有数据)
    nohup cpg -rg /video/* /root/video/$USBSN/$DIR/ > /root/cp.log 2>&1 &
    
    sleep 1
    #发送copy到本地日志
    str1=`cat /root/cp.log | tail -1`
    string="copy到本地时发生错误请检查!"
    grep -E "error|warning|failed" /root/cp.log
    
    #检查到错误信息停止执行发送消息
    if [ $? -eq 0  ];then
       python3 /root/script/feishugerenlocal_cpg.py "$string"
       exit 1
    else
       python3 /root/script/feishugerenlocal_cpg.py "${str1:5}"
    fi
    echo "${str1:5}"
    
    #创建oss目录
    if [ ! -d /ossfs/视频/$USBSN ];then
        mkdir /ossfs/视频/$USBSN
    else
       echo "目录已存在!" > /root/sh.log
    fi
    
    #拷贝本地的文件到阿里OSS存储
    nohup cpg -rg /root/video/$USBSN/$DIR /ossfs/视频/$USBSN > /root/cp.log 2>&1 &
    
    sleep 1
    
    #发送copy到OSS日志
    str2=`cat /root/cp.log | tail -1`
    string2="copy到阿里OSS存储时发生错误请检查!"
    grep -E "error|warning|failed" /root/cp.log
    
    #检查到错误信息停止执行发送消息
    if [ $? -eq 0  ];then
       python3 /root/script/feishugerenoss_cpg.py "$string2"
       exit 1
    else
       python3 /root/script/feishugerenoss_cpg.py "${str2:5}"
    fi
    
    #完成后返回状态文件传回物理机作为下次查询
    echo "当前设备状态: 1" > /root/script/status.txt
    expect -c "
        spawn scp $FILE  $USER@$HOST:$TOFILE
         expect {
            \"*assword\" {set timeout 300; send \"$PASSWARD\r\"; exp_continue;}
            \"yes/no\" {send \"yes\r\";}
        }
    EPpect eof"

    5.测试并验证结果

    在物理机上执行

    sh monitor_usb.sh

     

    拷贝到虚拟机验证结果

     

    拷贝到阿里云OSS验证结果

     发送消息至飞书验证结果

    6.创建自动执行拷贝

    启动命令在物理机执行

    nohup sh monitor_usb.sh > cp.log 2>&1 &

    此命令会一直向cp.log 写日志,所以写个定时任务过段时间记得清理一下


    总结

    至此整个项目就结束了,但是要注意的是,本项目是从物理机向虚拟机传输再向阿里云OSS存储传输,所以比较麻烦,直接传输物理机的话比较简单,上面的脚本改改应该问题不大。

    展开全文
  • 此文件为识别可移动设备并实现从U盘拷贝指定后缀名文件到指定目录,或从指定目录拷贝文件到U盘,全部操作过程无痕。
  • u盘自动拷贝vb源代码

    2008-10-03 08:54:50
    自己编写的可以自动检测U盘插入后自动拷贝到指定文件夹。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,046
精华内容 5,618
关键字:

u盘自动拷贝