【问题标题】:Copy a folder and its contents to USB stick in Ubuntu在 Ubuntu 中将文件夹及其内容复制到 U 盘
【发布时间】:2014-10-28 03:56:43
【问题描述】:

如何创建一个 Python 脚本,将文件夹及其所有内容从我的 Linux 笔记本电脑复制到 USB 记忆棒?

我尝试过使用shutil.copytree,但它不起作用。我尝试使用终端命令,它只是复制了文件夹而不是文件。

复制树错误:

"/usr/lib/python3.4/os.py", line 237, in makedirs mkdir(name, mode) 
FileExistsError: [Errno 17] File exists: '/media/user/JAKE'

【问题讨论】:

  • 在 linux 命令中使用子进程?使用 -R
  • shutil.copytree 在什么方面不起作用?
  • ' import shutil >>> shutil.copyfile('/home/user/Documents/First_Year', '/media/user/JAKE') Traceback(最近一次调用最后):文件“”,第 1 行,在 shutil.copyfile('/home/user/Documents/First_Year', '/media/user/JAKE') 文件 "/usr/lib/python3.4/shutil.py ",第 107 行,在副本文件中,open(src, 'rb') as fsrc: IsADirectoryError: [Errno 21] Is a directory: '/home/user/Documents/First_Year''
  • 这是我的代码和我得到的错误抱歉不清楚,不知道如何正确格式化
  • 您可以在拨打shutil.copytree(source, destination)之前先拨打destination = '/media/user/JAKE';shutil.rmtree(destination)

标签: python linux


【解决方案1】:
import shutil
shutil.copytree(src,dest)

shutil.copytree(src, dst, symlinks=False, ignore=None)

递归地复制以 src 为根的整个目录树。由 dst 命名的目标目录必须不存在;它将被创建以及缺少父目录s。

这行是您看到错误的原因:

以 dst 命名的目标目录必须不存在 或者

如果使用子进程,则需要-R 标志:

subprocess.check_call( ["cp", "source", "-R" ,"dest"]) 

【讨论】:

  • >>> 导入子进程 >>> subprocess.check_call( ["cp", "'/home/user/Documents/First_Year'", "-R" ,"'/media/user/ JAKE'"]) Traceback(最近一次调用最后):文件“”,第 1 行,在 subprocess.check_call( ["cp", "'/home/user/Documents/First_Year'" , "-R" ,"'/media/user/JAKE'"]) 文件 "/usr/lib/python3.4/subprocess.py", 第 557 行, 在 check_call 中引发 CalledProcessError(retcode, cmd) subprocess.CalledProcessError:命令 '['cp', "'/home/user/Documents/First_Year'", '-R', "'/media/user/JAKE'"]' 返回非零退出状态 1
  • 这就是我使用子进程得到的
  • 我用shutil得到了这个>>> import shutil >>> shutil.copytree('/home/user/Documents/First_Year','/media/user/JAKE') Traceback (最近的最后调用):文件“”,第 1 行,在 shutil.copytree('/home/user/Documents/First_Year','/media/user/JAKE') 文件“/usr/lib /python3.4/shutil.py",第 302 行,在 copytree os.makedirs(dst) 文件中 "/usr/lib/python3.4/os.py",第 237 行,在 makedirs mkdir(name, mode) FileExistsError: [Errno 17] 文件存在:'/media/user/JAKE'
  • 您是否在子进程命令的引号中加上引号?
  • 并且文件已经存在,所以这就是导致 copytree 错误的原因
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2020-05-16
  • 1970-01-01
  • 2011-11-16
相关资源
最近更新 更多