【问题标题】:Python - How to copy content of USB(Flash) to system directoryPython - 如何将 USB(Flash)的内容复制到系统目录
【发布时间】:2016-05-27 06:37:26
【问题描述】:

我要编程的是,

USB 驱动器 连接到系统时,代码必须自动启动并复制 USB 驱动器的内容(目录、文件等)到系统的默认备份目录。

我遇到了一些网站,发现我可以使用 shutil library https://docs.python.org/2/library/shutil.html 高级文件操作。没用过Shutil库,请问有没有其他方法实现,

以前有人这样做过,请帮忙。谢谢

【问题讨论】:

  • 从闪存驱动器复制可能与从其他任何地方复制没有什么不同。您了解如何使用shutil 或其他任何方式复制任何文件吗?闪存驱动器文件系统的显示位置可能会因您的操作系统而异,但是一旦您了解了该部分,就没什么了。

标签: python linux python-2.7 shutil


【解决方案1】:

我已经解决了这个问题,希望这对像我这样的初学者有所帮助。

首先我使用shutil复制文件和目录的代码以获取更多帮助https://docs.python.org/2/library/shutil.html, 连接U盘进行操作

第 1 步:code_to_copy.py

import os
import datetime
import shutil
from shutil import copytree, ignore_patterns

files = os.listdir('/media/user/')

destination = '/home/user/Path/Backup/back_%s'%datetime.datetime.now()
try :
    for f in files:
        source = '/media/user/%s' % f
        copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))    
except Exception as e:
    print e

你可以运行这个文件来检查它是否在复制,然后

创建 bash 文件

第 2 步:code_to_copy.sh

#!/bin/bash
python /home/user/path/code_to_copy.py

确保您拥有此文件的权限

第 3 步:添加到 cron

$ crontab -e

#add this line
* * * * * /home/user/path/code_to_copy.sh > /tmp/code_to_copy.log

# 检查 /tmp/code_to_copy.log 中的日志文件

一分钟后,您连接的设备数据将被复制到您的备份文件夹中。

【讨论】:

  • 您如何确保 USB 驱动器始终挂载到 /media/user/
【解决方案2】:

您可以使用非常简单的pythons shutil库来处理复制操作。如果您需要自动化该过程,请尝试以下步骤:

1:如果要获取pendrive或任何其他可移动驱动器中的所有文件,则获取所有文件并通过以下方式将其写入列表:

import os
files = os.listdir('path-to-removable-media') 

2:完成后遍历列表并使用shutil库复制文件。

 import shutil
 for f in files:
     shutil.copyfile('/source path/%s' % f, '/destination path/%s' %f)

3:现在,如果您需要自动化该过程,请在存在 python 脚本的文件夹中创建一个包含以下内容的 bash 文件(扩展名为 sh 的文件)。(例如:创建文件 test.sh 并复制以下内容)

 #!/bin/bash
 clear
 python script.py 

4:如果您需要在特定时间间隔检查或运行,并且如果未连接可移动媒体,则将其添加到您的 cronjob 中,还需要处理异常情况。

5:获取源码可以在python中使用子进程。

import subprocess
output = subprocess.Popen("lsblk", stdout=subprocess.PIPE, shell=True)
for out in output.communicate()[0].split():
    if '/media/' in out:
        print out

这将给出 linux 设备中可移动媒体的路径。

【讨论】:

  • 嘿@vishnu 这对我有帮助,但是如何获取闪存驱动器的源路径?
  • @KamleshJaiswal 我有检测可移动媒体的anwser
  • 但是这种检测可移动媒体的方法需要有人查看打印的行。如何自动获取打印结果?
【解决方案3】:

这是一个如何将文件复制到 USB(可移动设备)的示例,您可以进行反转。

import os
file = "cat.jpg"
os.system("for /F \"tokens=1*\" %a in (\'fsutil fsinfo drives\') do (for %c in (%b) do (for /F \"tokens=3\" %d in (\'fsutil fsinfo drivetype %c\') do (if %d equ Removable (copy " + file + " %c))))")

【讨论】:

  • 你能解释一下这很长的代码行中的所有内容吗?
猜你喜欢
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2011-09-07
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多