突发奇想,插上usb,能不能自动执行usb上的程序。查了一下,发现只有Windows才有,具体也可以搜索(搜索关键字usbautorun)。但是,如果我想,比如插入usb后,在后台自动将usb中的重要文件复制到本地或上传到服务器,而无人察觉,则需要专门的软件辅助。于是心里想,能不能用python写个程序,让它在后台运行。每当插入U盘时,都会自动复制重要文件。如何判断U盘是否插入?首先,我们打开电脑终端,进入/Volumes目录。这时候插入U盘,发现挂载到了这个目录下。也就是说,我们只需要定时扫描这个目录,当这个目录下出现新的文件夹时,很有可能已经插入了U盘。我的设计是这样的,使用time.sleep(3)函数让程序保持运行状态,每三秒检查一次/Volumes/目录,如果文件夹多了就复制到另一个文件夹。正如标题所说,我们真的只用了10行(实际上是11行,凑齐了:)就完成了这个“病毒”。我们可以找到usb里面的目录,插入半分钟后都在home目录下。如何有选择地复制文件?我们只是写了一个很简单的脚本来测试这个想法的可行性,但是还是有问题。之所以能把U盘里的文件全部快速复制进去,是因为U盘里只有两三个文件,而且大小不超过15M。如果目标U盘中有很多我们不需要的电影、音乐、文件,我们的程序应该可以跳过它们,只选择一些重要的比如.docx比如.ppt文件,或者直接复制最近修改的那些文件,或者排除所有大小大于5M的文件。我们可以用python做吗?当然!让我们举个例子。我在某个目录下创建了一个testwalk文件夹,里面有三个文件file123.txt和三个文件夹folder123,其中folder1里面有文件file4.txt和folder4现在我们测试一下,root存放的是当前位置,会把所有的./testwalk/下的文件夹为根目录,向下搜索,分别查看dirs单独查看文件好了,现在我们需要递归usb文件夹,找到所有文件,查看大小,如果小于,如3M,抄到家里就可以了,如果比它大就舍弃。shutilmodule下面我们以刚才的文件夹为例。如果想将file1.txt复制到folder2:shutil中还有很多其他的工具,这里不再赘述。os.path.getsize()确定大小os.path.getsize(filename)返回一个以字节为单位的值。如果用于检查文件大小,我们需要手动编写一个函数将其转换为易于阅读的形式。这里我们只需要选择小于3M的文件大小,3M=3*1024kB=3*1024*1024byte结合shutil.copy2就可以将选择大小的文件复制到我们的目标文件夹中。如何指定文件类型这里需要正则表达式来帮助我们。正则表达式比较多,《python核心编程》用了一整章,就不深入了。如下,我们允许将指定的文件后缀和指定的文件大小复制到我们的目标文件中:不要忘记导入re使用更复杂的正则表达式可以更好地指定文件类型并根据修改时间过滤文件在这次,我在该目录下创建了一个名为newfile的文件。简而言之,过滤每个文件的修改时间,只复制那些最近修改或添加的文件,或者在特定时间段内。此功能在某些情况下非常有用。总结其实标题只是为了吸引大家的眼球而已。这是一个小程序,不是病毒。想通过这个例子来展示python处理文件的强大能力,调动大家的学习热情。以上实现都是基于macos的,linux应该也一样,windows稍加修改即可成功。以上技巧仅供学习,请勿用于其他行为
