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

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

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

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

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

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

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

现代云原生设计理念

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

NFS服务器架设篇

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

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

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

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

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

微软亚洲研究院全球院友线上欢聚,共话新春

金鼠辞旧岁,金牛报春时;万象正更新,乾坤喜气多。西雅图时间 2 月 6 日,北京时间 2 月 7 日,由微软亚洲研究院院友会西雅图分会主办的“牛转新运”院友新春线上茶话会圆满落幕。重量级嘉宾沈向洋、洪小文、张亚勤、张宏…

从串行线程封闭到对象池、线程池

今天讲一个牛逼而实用的概念,串行线程封闭。对象池是串行线程封闭的典型应用场景;线程池糅合了对象池技术,但核心实现不依赖于对象池,很容易产生误会。 本文从串行线程封闭和对象池入手,最后通过源码分析线程池的核心原…

netty springmvc_springmvc源码架构解析之HandlerMapping

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…

腾讯牛逼,我酸了!!

阅读本文大概需要8分钟。腾讯这两天搞了个业内爆炸沸腾的事情:全员阳光普照发放100股,解禁期一年。腾讯股价近年来一直在疯狂上涨,100股折合人民币6万多:关键是员工什么都没做,直接拿到价值6万的股票。作用可以说是相当…

这本造价500万的“黑科技”日历,用377张爆美插画给你365天理想生活

以前,每个人家里, 都挂着一本日历。 爷爷戴着老花镜, 盘看着黄道吉日; 奶奶一字一句, 念叨着每日禁忌; 我们跟着日历过日子, 时光缓慢,记忆清晰。 那时候,日历本上的日子…

eladmin代码自动生成_如何让Mybatis自动生成代码

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:阿进的写字台cnblogs.com/homejim/p/9782403.html在使用 mybatis 过程中, 当手写 JavaBean 和 XML 写的越来越多的时候, 就越来越容易出错。这种重…

.NET微服务

前文传送门:什么是云原生?现代云原生设计理念Microservices微服务是一种构建现代应用程序的流行的体系结构,云原生系统拥抱微服务。微服务是由一组(使用共享结构交互的、独立的小块服务)搭建的分布式集,具有以下特征:在…

还是找程序员做老公,最靠谱!

很多MM在选老公的时候,都会选择帅气多金,职业又稳定的男生做老公,像医生啊、律师啊、老师啊这类职业。 但是,你有没有想过? 医生的身边都围着好多护士小姐,而且天天加班是常态,相处的时间太少&a…

14个超级牛X的免费开源小工具!

最近整理了一些在用的,感觉还不错的开源小工具,有的仅适用MacOS,但多数跨平台。 Homebrew Homebrew — The missing package manager for macOS:https://brew.sh,Mac上非常好用的包管理工具,很多常见的安装…

硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下

博客 有更多精品文章哟。Composite 的优化 终于,我们到了像素管道的末尾。对于这一部分的优化策略,我们可以从为什么需要 Composited Layer(Graphics Layer)来入手。这个问题我们在构建 Graphics Layer Tree 的时候,已…