python 复制文件_10 行 Python 代码写 1 个 USB 病毒

(给Python开发者加星标,提升Python技能)

转自: 知乎-DeepWeaver

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到。但是,如果我想,比如,当一个usb插入时,在后台自动把usb里的重要文件神不知鬼不觉地拷贝到本地或者上传到某个服务器,就需要特殊的软件辅助。

于是我心想,能不能用python写一个程序,让它在后台运行。每当有u盘插入的时候,就自动拷贝其中重要文件。

如何判断U盘的插入与否?

e2152e5f8045259e2d9d1ed49e6f3368.png

首先我们打开电脑终端,进入/Volumes目录,这时候插入U盘,可以发现它被挂载在了这个目录之下,也就是说,我们只要在固定时间扫描这个目录,当这个目录有新文件夹出现的时候,很可能有U盘被插入了。

我的设计是这样的,用time.sleep(3)函数,让程序保持运行状态,并且每隔三秒查看一下/Volumes/目录,如果多出来文件夹,就将其拷贝到另外的文件夹。

5755507ca88590d05293f72ba0e43ddc.png

就像标题所示,我们真的只用了10行(其实是11行,凑个整:)完成了这个“病毒”。我们可以发现usb中的目录,在插入半分钟后全部躺在了home目录下了。

如何选择性的复制文件?

刚刚我们写了一个很简易的脚本测试了一下这个想法的可行性,但是还是有问题。刚才之所以能把U盘中所有文件很快复制进去,是因为U盘中只有两三个文件,大小不超过15M。如果目标U盘中有很多电影,音乐,这些我们并不需要的文件,我们的程序就应该能跳过它们,仅仅选择一些重要的比如.docx比如.ppt文件,或者仅仅复制最近修改过的那些文件,或者排除所有大小大于5M的文件。我们可以用python做到吗?当然!

os.walk 递归文件夹中所有文件

http://www.runoob.com/python/os-walk.html

这里我放了一个别人的教程。大家可以大概了解一下,总之我大概理解是这么个东西。

还是举个例子吧。

我在某目录下创建了testwalk文件夹,里面有file123.txt三个文件,folder123三个文件夹,其中folder1中有文件file4.txt以及folder4

90f999075b901da7648286bb12351945.png

现在我们来测试一下

756a5f4ee3a55a3845784f6afeea9b53.png

root存放的是当前位置,它会把./testwalk/下所有的文件夹作为根目录,往下搜索

4934e10f40c810e0ec9bcc2a93c2830b.png

单独查看 dirs

00145ce441aee7051197806f88a779b9.png

单独查看 files

45cb6c089786b9bdf9f13008b45a033d.png

好了,我们现在需要递归usb文件夹,找到所有的file,查看大小,如果小于,比如3M,就拷贝进home,大于就舍去。

shutil模块

af1915802ed43c14acc0cd177f7e79c1.png

现在我们拿刚才的文件夹举例子,如果想把file1.txt拷贝到folder2:

fec4dc759926a5fa62aaeb573a7b0f4d.png

还有许多使用工具在shutil里面这里就不详述了。

os.path.getsize()判断大小

os.path.getsize(文件名)返回的是一个单位为byte的数值,如果用来查看文件大小,我们则需要手动写一个函数,将其换算成容易阅读的形式。

32b7b27e5c33ea9f762f12e3cf73f5b6.png

这里我们只要选择文件大小小于3M的即可,3M = 3 * 1024kB = 3 * 1024*1024byte

690f749ce6581edd579cabc241f66bcc.png

结合shutil.copy2就可以把选定大小的文件复制进我们的目标文件夹了

如何指定文件类型

这里就需要正则表达式来帮助我们了。

正则表达式内容很多,《python核心编程》中用了整整一章来讲,所以我们也不深入了。下面是官方文档,感兴趣的可以看一下。

https://docs.python.org/2/library/re.html

如下,我们让指定文件后缀以及指定文件大小可以复制进我们的目标文件:

别忘了导入 re

621f5c0a9e0362e99a6ebbf99a30d8f7.png

用更加复杂的正则表达式可以更好地指定文件类型

根据修改时间筛选文件

f729fcfaebb00fd1e0b8113bd7218a3c.png

这时候我在目录下创建了一个文件叫做newfile

a6a6b4dd00377ebb4b00d83defd86c75.png

总之,对每一个文件进行修改时间的筛选可以只复制那些近期,或者特定时期修改或者添加过的文件,这个功能在特定情况下很有用。

总结

其实,标题这么起只是为了吸引大家注意,这就是一个小程序,也谈不上病毒。我更想通过这个例子,展示python对于文件处理的强大能力,引发大家的学习热情。以上实现都是基于macos,linux应该一样,windows稍加修改也可以成功。

推荐阅读

(点击标题可跳转阅读)

10 万台电脑感染,“微信支付”勒索病毒制作者已被抓获

一行代码完成并行任务

觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

10e8f3508646eca3a037bb1f46b47dcd.png

好文章,我在看❤️

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

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

相关文章

html5中外描边怎么写,CSS3实现文字描边的2种方法(小结)

问题最近遇到一个需求,需要实现文字的描边效果,如下图解决方法一首先想到去看CSS3有没有什么属性可以实现,后来被我找到了text-stroke该属性是一个复合属性,可以设置文字宽度和文字描边颜色该属性使用很简单:text-stro…

混凝土墙开洞_满城混凝土柱子切割资质齐全

满城混凝土柱子切割资质齐全专业楼板切割开洞,钢筋混凝土墙开门,开窗,开方洞。混泥土承重墙新开门洞、开窗、通风管道开洞、专业开楼梯口,楼梯口加固,地下室开门洞,水泥墙开门加固、楼板加固、砖墙开门开窗…

马云害怕的事还是发生了

当前,余额宝的收益维持在4%左右不能突破,只能用作“钱包”放点零钱了。 放银行或者余额宝收益偏低,股票市场又处于震荡周期,期货市场等不是普通人进得去的,还不如直接买较高收益的互联网理财产品。 比如屡受政策利好…

Unix操作系统***追踪反击战

阅读提示:在Unix系统遭受***后,确定损失及***者的***源地址相当重要。虽然在大多数***者懂得使用曾被他们攻陷的机器作为跳板来***你的服务器可在他们发动正式***前所做的目标信息收集工作(试探性扫描)常常是从他们的工作机开始的…

python才能做爬虫,No,C#也可以!

介绍网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模…

cmosfixr插件怎么用_3dmax插件神器|怎么用3dmax插件神器去完成背景墙的效果图设计?...

又到3dmax插件神器的小课堂时间了!小伙伴们还记得之前几张的知识点吗?如果不记得自己去温习,温故而知新哦!如果学会了,下面学习3dmax插件神器小技巧的第四章建模篇的第4.16小节:怎么用3dmax插件神器去完成背…

jsoup 获取html中body内容_jsoup实现java抓取网页内容

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup的主要功能如下:1. 从一个URL,文件或字符串中解析…

html中label的寬度無法修改,如何设置HTML span、label 的宽度

该文讲述如何设定 HTML span 宽度。 缺省情况 HTML span 的宽度设定无效在 HTML 中如何设定 span 的宽度?这看上去是个很简单的问题,似乎用 style 中的 width 属性就可以。例如: /p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transit…

27个赢得别人欣赏的诀窍

1.长相不令人讨厌,如果长得不好,就让自己有才气;如果才气也没有,那就总是微笑。2.气质是关键。如果时尚学不好,宁愿纯朴。 3.与人握手时,可多握一会儿。真诚是宝。 4.不必什么都用“我”做主语。 5.不要向朋…

不懂这25个名词,好意思说你懂大数据?

如果你刚接触大数据,你可能会觉得这个领域很难以理解,无从下手。近日,Ramesh Dontha在DataConomy上连发两篇文章,扼要而全面地介绍了关于大数据的75个核心术语,这不仅是大数据初学者很好的入门资料,对于高阶…

您好,dotnet tool

在.net core发布之初,dotnet cli就诞生了,dotnet cli的作用是什么呢?主要是用来创建,还原,构建,发布,测试等一系统管理功能,本来,visual studio中是有这些功能的&#xf…

iphone4 base64 mp3 无法解析 html5,javascript - 如何使用HTML5在firefox上播放base64音频数据? - 堆栈内存溢出...

我正在尝试编码base64格式的mp3文件。 然后通过broswer播放。 它适用于safari和chrome,但不适用于Firefox 。我的问题是“有没有办法让firefox以base64 /二进制字符串格式播放音频文件?”ps:我知道firefox无法播放mp3,所以我尝试过…

ab压力测试_Apache ab压力测试的知识点

Apache-ab是著名的Web服务器软件Apache附带的一个小工具,它可以模拟多个并发请求,测试服务器的最大承载压力。ab 是apachebench的缩写,ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的&…

现代云原生设计理念

前文传送门什么是云原生?现代设计理念你会如何设计云原生应用程序?需要遵循哪些原则、模式和最佳实践?需要特别关注哪些底层/操作?十二要素应用程序目前被普遍认可的基于云的方法论是"十二要素应用程序",它给…

NFS服务器架设篇

大家好,本周我们的课程是NFS服务器的架设。下面我们分几个部分来介绍NFS服务器。一、NFS简介NFS是分布式计算机系统的一部分,一般在用unix和类unix的系统上实现文件的传输。而且可以把NFS服务器共享的目录挂载到本地,使用cp,cd&am…

mysql 碎片率_MySQL数据碎片的整理和分析

MySQL具有相当多不同种类的存储引擎来实现列表中的数据存储功能。每当MySQL从你的列表中删除了一行内容,该段空间就会被留空。而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大。当MySQL对数据进行扫描时&#xff0c…

用画小狗的方法来解释Java中的值传递

在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? 如果你的回答是“小强”,好,恭喜你答对了。下面我们改一下代码: 是的,我只是在changeName方法里面加了一句代码 这一次…

html怎么防止表单重复提交,js防止表单重复提交的解决方法

防止表单重复提交,通常会通过attachEvent在 form的onsubmit事件中写一个方法,每次触发该事件时执行该方法,可以给form增加一个submited属性,每次判断这个属性,为 false时继续提交表单并且设置form.submitedtrue&#x…

gif分解工具_Python之GIF图倒放,沙雕快乐源泉

GIF图现在已经融入了我们的日常网络生活,微信群、QQ群、朋友圈......一言不合就斗图,你怕了吗?不用担心,只要学会了Python之GIF倒放技能,你就是“斗图王”。咱们直接开始本文的内容!使用的工具1PIL(Python …

使用Forms Authentication实现用户注册、登录 (三)用户实体替换

使用Forms Authentication实现用户注册、登录 (三)用户实体替换 收藏IPrincipal和IIdentity通过查阅文档,我们可以看到HttpContext.User属性的类型是IPrincipal接口。然而我们知道,接口通常是不能直接访问的,其背后必定…