python-运行bash脚本以在USB设备安装后自动从USB设备复制内容

我有一个python脚本可将所有文件从USB存储设备复制到Ubuntu计算机中的目标文件夹.我以前从未用Python编程过.

import os
import shutil
from shutil import copytree,ignore_patterns

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

destination = '/home/user/Documents/Test/%s'
try :
    for f in files:
        source = '/media/user/HP drive/%s' % f
        copytree(source,destination,ignore=ignore_patterns('*.pyc','tmp*'))    
except Exception as e:
    print(e)

上面的脚本运行良好,但是它在Test文件夹内用锁定符号创建了一个文件夹%s.当我删除%s而只使用

destination = '/home/user/Documents/Test/'

它给我[Errorno 17]文件存在.

这是安装USB设备时要运行的bash脚本(copy.sh).

#!/bin/sh

python /var/www/html/copy_flash.py    #This doesn't work.

# echo "My message" > /var/www/html/thisisaverylongfilename.txt #This works

因此,当我插入USB时,python命令不起作用,但是echo命令起作用.

这是我在/etc/udev/rules.d/test.rules中添加的行

ACTION=="add",KERNEL=="sdb*",RUN+="/var/www/html/copy.sh"

是因为bash脚本运行时USB驱动器未准备好吗?

>如何将USB驱动器的内容复制到常规文件夹而不是%s中?
>我实际上如何复制内容

最佳答案
为了不使用%s,可以使用format方法.

source = '/media/users/HP/{path}'.format(path=your_filename_here)

您可以在括号内使用任何名称,这些名称将创建格式的关键字参数.您也可以使用转换为位置参数的数字.
一个例子:

'Hello {0}! Good {1}'.format('DragonBorn','Evening!')

来自shutil的copytree还要求目标不存在.因此,您将需要检查目标位置是否存在,如果存在则将其删除.您可以为此使用os.rmdir和os.path.exists. Shutil也可能具有同等功能.

https://docs.python.org/3.5/library/shutil.html#shutil.copytree

您可以执行以下检查并使用以下命令复制树:

if os.path.exists(destination):
    if os.listdir(): # If the directory is not empty,do not remove.
        continue
    os.rmdir(destination)
shutil.copytree(source,destination)

如果要删除目录下的整个树,则可以使用shutil.rmtree().

if os.path.exists(destination):
    shutil.rmtree(destination)

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...