GVKun编程网logo

在Python中递归复制文件或目录(python 递归 yield)

14

本文将介绍在Python中递归复制文件或目录的详细情况,特别是关于python递归yield的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于cp复制

本文将介绍在Python中递归复制文件或目录的详细情况,特别是关于python 递归 yield的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于cp 复制文件或目录、cp复制文件或目录命令讲解、Lambda函数可以在Python中递归调用吗?、Linux 使用 cp 复制文件或目录的知识。

本文目录一览:

在Python中递归复制文件或目录(python 递归 yield)

在Python中递归复制文件或目录(python 递归 yield)

Python似乎具有复制文件的功能(例如shutil.copy)和复制目录的功能(例如shutil.copytree),但是我还没有找到能够同时处理两者的函数。当然,检查要复制文件还是目录很简单,但这似乎很奇怪。

确实没有像unixcp -r命令那样工作的标准函数,即同时支持目录和文件以及递归复制吗?在Python中解决此问题的最优雅方法是什么?

答案1

小编典典

建议您先致电shutil.copytree,如果引发异常,请重试shutil.copy

import shutil, errnodef copyanything(src, dst):    try:        shutil.copytree(src, dst)    except OSError as exc: # python >2.5        if exc.errno == errno.ENOTDIR:            shutil.copy(src, dst)        else: raise

cp 复制文件或目录

cp 复制文件或目录

命令解释

复制(cp)这个命令特别重要,我们会经常进行一些数据的复制,但是这个命令也可以创建连接文件(也就是我们所熟悉的快捷方式)。如果你不是管理员(root)用户,就会牵扯到权限这个部分的困扰,接下来我们进行举例一一说明。

命令说明
[root@localhost ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination) [root@localhost ~]# cp [options] source1 source2 source3 ... destination 参数: -a : 相当于 -pdr 的意思,我们下面会说明用法。[【常用】] -d : 若源文件为连接文件的属性,怎么复制连接文件属性而非文件本身。 -f : 为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次。 -i : 如目标文件(destination)已经存在时,在覆盖时会先询问。[【常用】] -l : 进行硬连接的连接文件创建,而非复制文件本身。 -p : 连同文件的属性一起复制过去,而非使用默认属性。【备份常用】 -r : 递归持续复制,用于目录的复制行为。[【常用】] -s : 复制成为符号链接文件,即“快捷方式”文件。[【常用】] -u : 若 destination 比 source 旧才更新 destination。 最后要注意,如果源文件有两个以上,则最后一个的目标文件一定要是“目录”才行!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
命令举例
例题一、将123.log文件复制到/test下,并更名为456.log
[root@localhost ceshi]# ll -rw-r--r-- 1 root root 0 08-02 21:00 123.log drwxr-xr-x 2 root root 4096 08-02 21:01 test
  • 1
  • 2
  • 3
[root@localhost ceshi]# cp 123.log test/456.log [root@localhost ceshi]# cp -i 123.log test/456.log cp:是否覆盖“test/456.log”? n <= 不覆盖,取消操作。 y <= 覆盖。 # 由于test文件夹中已经存在456.log了,加上 -i 参数后,则在覆盖前会询问用户是否确定,就可以按下 n 或 y 来二次确认了!
例题二、查看/tmp目录下,会看到haha.log,将它复制到/home/ceshi下并且查看属性
root@localhost ceshi]# ll /tmp -rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 haha.log [root@localhost ceshi]# cp /tmp/haha.log . <= 想要复制到当前目录,最后的“.”不能忘 [root@localhost ceshi]# ll /tmp/haha.log haha.log -rw-r--r-- 1 root root 0 08-02 21:11 haha.log -rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 /tmp/haha.log # 在不加任何参数的情况下,文件的某些属性/权限会改变,连创建时间也不一样了。 [root@localhost ceshi]# cp -a /tmp/haha.log haha2.log [root@localhost ceshi]# ll /tmp/haha.log haha2.log -rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 haha2.log -rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 /tmp/haha.log # 两个文件属性一模一样,这就是 -a 的特性。
例题三、复制/tmp目录到/home/ceshi目录下面去
[root@localhost ceshi]# cp /tmp . cp: 略过目录 “/tmp” <= 不能直接复制目录,需要加上 -r 的参数。 [root@localhost ceshi]# cp -r /tmp . # -r 虽然是用来复制目录的,但是复制过来,文件与目录的权限可能会被改变 # 所以,也可以利用“cp - a /tmp .”来执行命令。
  • 1
  • 2
  • 3
  • 4
  • 5
例题四、将例题一复制的 456.log 创建一个连接文件
[root@localhost ceshi]# cp -l test/456.log aaa.log [root@localhost ceshi]# cp -s test/456.log bbb.log [root@localhost ceshi]# ll -rw-r--r-- 2 root root 47 08-02 23:05 aaa.log lrwxrwxrwx 1 root root 12 08-02 23:08 bbb.log -> test/456.log drwxr-xr-x 2 root root 4096 08-02 23:05 test
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用-l创建的aaa.log就是一个硬连接文件,而使用-s创建的bbb.log就是一个软连接文件,也就是说,bbb.log就是相当于咱们熟悉的“快捷方式”。

例题五、将例题四生成的bbb.log连接文件复制
[root@localhost ceshi]# cp bbb.log ccc.log [root@localhost ceshi]# cp -d bbb.log ddd.log [root@localhost ceshi]# ll bbb.log ccc.log ddd.log test/456.log lrwxrwxrwx 1 root root 12 08-02 23:08 bbb.log -> test/456.log -rw-r--r-- 1 root root 75 08-02 23:15 ccc.log lrwxrwxrwx 1 root root 12 08-02 23:16 ddd.log -> test/456.log -rw-r--r-- 2 root root 75 08-02 23:09 test/456.log # 能看出来,ccc.log与源文件一模一样,这里很有意思,咱们复制的是连接文件,结果却将原文件复制过来了 # 也就是说,如果没有加任何参数时,cp复制的是源文件,而非连接文件本身。 # 若要复制连接文件的属性,就得使用 -d 的参数了!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
例题六、将1、2、3文件复制到test文件夹下
[root@localhost ceshi]# ll -rw-r--r-- 1 root root 0 08-02 23:23 1 -rw-r--r-- 1 root root 0 08-02 23:23 2 -rw-r--r-- 1 root root 0 08-02 23:23 3 drwxr-xr-x 2 root root 4096 08-02 23:23 test
  • 1
  • 2
  • 3
  • 4
  • 5
[root@localhost ceshi]# cp 1 2 3 test [root@localhost ceshi]# ll test -rw-r--r-- 1 root root 0 08-02 23:25 1 -rw-r--r-- 1 root root 0 08-02 23:25 2 -rw-r--r-- 1 root root 0 08-02 23:25 3 # 可以将多个文件复制到同一个目录中,但是最后一定要是目录
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

cp复制文件或目录命令讲解

cp复制文件或目录命令讲解

文件的管理,少不了复制、粘贴文件,在Linux系统下,我们常用cp这个命令复制或粘贴文件。


cp


【语法】cp[选项][参数]
【详解】cp命令用于将单个或多个源文件或文件目录,复制到目标文件或文件夹目录中。
【参数】


选项 相应功能
-a 功能等于同时使用-d -p -r。
-b 在复制文件或目录时,为每个已经存在的目标文件或目录创建备份。
-d 当复制带符号链接的对象时,不复制符号连接所指向的目标文件或目录。
-f 强制复制文件或目录,不提示任何信息。
-i 复制文件时,遇到同名文件或文件夹时提示确认
-l 不复制文件,建立源文件的快捷方式
-p 保留源文件或目录的所有者、所属组信息和权限属性。
-P 功能同等于-d
-r 复制目录及目录内的所有文件或子目录
-s 创建符号链接
-S 指定备份文件的扩展名
-u 在更新源文件或目标文件不存在的情况下才复制文件
-v 显示命令的执行详细过程
-x 当源文件或目录所在的文件系统(如ext3)与目标文件或目录所在的文件系统
相同的情况下才进行复制。
--help 显示命令帮助信息。
--version 显示cp命令版本信息。

【说明】


关键词 介绍
源文件或目录 被复制的文件或目录
目标文件或目录 被复制的文件或目录,所要到达的位置。

例子


1、将/root/目录下的“kwx.gd.gif”复制到/wwwroot目录中,并显示过程。


cd /root/ cp -v kwx.gd.gif /wwwroot/

2、将/root/kwx.gif复制 一份名叫kwxgd.gif的副本,并显示过程。


cd /root/ cp -v kwx.gif kwxgd.gif #用法 cp -v(显示过程)(空格) 源文件或文件夹(空格)目标文件或文件夹

Lambda函数可以在Python中递归调用吗?

Lambda函数可以在Python中递归调用吗?

常规函数可以在其定义中包含对自身的调用,没问题。我无法弄清楚如何使用lambda函数,原因很简单,因为lambda函数没有可引用的名称。有办法吗?怎么样?

Linux 使用 cp 复制文件或目录

Linux 使用 cp 复制文件或目录

使用方法:

$ cp --help
用法:cp [选项]... 源文件 目标文件
 或:cp [选项]... 源文件... 目录
将源文件复制至目标文件,或将多个源文件复制至目标目录。

长选项必须使用的参数对于短选项时也是必需使用的。
  -a                       相当于 -pdr
  -d                       如果源文件为软连接文件,则复制软连接而非文件本身
  -p, --preserve[=属性列表] 保持指定的属性(默认:模式,所有权,时间戳)
  -r, -R, --recursive      递归复制目录及其子目录内的所有内容
  -v, --verbose            显示复制过程

使用示例:

# 复制文件到目录
cp file1 /tmp/

# 复制文件到目录并重命名
cp file1 /tmp/test1

# 递归复制目录内容到另一目录
cp -r dir1/ /tmp/

# 递归复制目录内容到另一目录
cp -r dir1/ /tmp/dir2

# 复制文件到目录并保留原文件的属性信息
cp -p /home/user1/file1 /tmp/

# 递归复制目录内容到另一目录并保留原文件的属性信息
cp -pr /home/user1/dir1/ /tmp/

# 复制文件到另一目录并保留原文件的属性信息
cp -a /home/user1/file1 /tmp/

# 递归复制目录内容到另一目录并保留原文件的属性信息
cp -a /home/user1/dir1/ /tmp/

# 递归复制目录内容到另一目录并显示复制过程
cp -r -v /home/user1/dir1/ /tmp/

我们今天的关于在Python中递归复制文件或目录python 递归 yield的分享已经告一段落,感谢您的关注,如果您想了解更多关于cp 复制文件或目录、cp复制文件或目录命令讲解、Lambda函数可以在Python中递归调用吗?、Linux 使用 cp 复制文件或目录的相关信息,请在本站查询。

本文标签: