当前位置: 首页 > 科技观察

仔细想想,插上U盘开始执行Python代码_3

时间:2023-03-16 12:17:13 科技观察

心血来潮,插上U盘,能不能自动执行U盘上的程序。查了一下,发现只有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下面我们来测试一下。rootstore就是当前位置,它会把./testwalk/下的所有文件夹作为根目录,往下查找。分别查看dirs单独查看文件,现在我们需要递归usb文件夹,找到所有文件,查看大小,如果小于,比如3M,复制到home,如果大于,则丢弃。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稍加修改即可成功。以上技巧仅供学习使用,不应用于其他行为。