cp命令

cp命令主要用于复制文件或目录。

语法

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

参数

  • -a, --archive: 与-dR --preserve = ALL相同,执行复制时,尝试保留尽可能多的原始文件结构,属性和关联的元数据。
  • --attributes-only: 不复制文件数据,仅创建具有相同属性的文件,如果目标文件已经存在,不更改其内容,并且可以使用--preserve选项精确控制要复制的属性。
  • --backup[=CONTROL]: 对每个现有目标文件进行备份,否则将被覆盖或删除,该控制参数CONTROL指定了版本控制的方法来使用:none, off,不进行备份;numbered, t,进行编号备份;existing, nil,简单的说明编号是否存在编号备份;simple, never, 始终进行简单的备份。有一种特殊情况,当sourcedest是相同的常规文件时,cp --force --backup将对源进行备份。
  • -b : 类似于--backup,但不接受控制参数,始终使用默认的控制方法。
  • --copy-contents: 递归操作时,复制特殊文件的内容,例如FIFO/dev中的设备,通常适用于专业用途。
  • -d: 复制符号链接本身而不是它们引用的文件,并保留副本中源文件之间的硬链接,与--no-dereference --preserve = links相同。
  • -f, --force: 如果无法打开现有的目标文件,将其删除,然后重试。如果使用n / --no-clobber选项,则此选项无效,但是其独立于-i / --interactive来应用,这两个选项都不能消除另一个的影响。
  • -i, --interactive: 覆盖前提示,覆盖先前的-n选项。
  • -H: 遵循命令行上指定的符号链接,但保留发现的链接。如果命令行上的参数之一是符号链接,请复制引用的文件,而不是链接本身。但是如果在递归遍历过程中发现了符号链接,它将被复制为符号链接,而不是常规文件。
  • -l, --link: 创建指向文件的硬链接,而不是复制它们。
  • -L, --dereference: 始终遵循源文件中的符号链接,如果source是符号链接,请复制链接到的文件,而不是符号链接本身,指定此选项后,cp无法在目标副本中创建符号链接。
  • -n, --no-clobber: 不要覆盖现有文件。如果先前指定了-i / --interactive,则此选项将覆盖它,不能使用-b / --backup来指定此选项,因为仅在文件将被覆盖时才创建备份。
  • -P, --no-dereference: 不遵循源代码中的符号链接,将符号链接复制为符号链接,但是仍然可以遵循目标中遇到的现有符号链接。
  • -p: 与--preserve=mode,ownership,timestamps相同。
  • --preserve[=ATTR_LIST]: 保留指定的属性,以逗号分隔。属性是:mode,保留文件模式位(由chmod设置)和任何ACLownership,保留所有者和组(按chown设置),保留这些属性的能力与使用chown相同;timestamps,如果可能的话,保留最后一次文件访问和修改的时间(atimemtime,由touch设置);links,在目标文件中保留源文件之间的所有链接,使用-L-H时,此选项可能会将符号链接复制为硬链接;context,保留源文件的SELinux安全上下文,否则将由于详细的诊断而失败;xattr,保留源文件的扩展属性,否则将因详细诊断而失败;all,保留以上所有内容,与单独指定上述所有属性相同,不同之处在于无法复制contextxattr不会给出失败的退出状态。如果未指定,则attr_list的默认值为modeownershiptimestamps
  • -c: 已弃用,与--preserve=context相同。
  • --no-preserve=ATTR_LIST: 不要保留指定的属性。
  • --parents: 在目录下使用完整的源文件名,即在复制到目标目录时,根据source中指定的路径名,在目标中创建丢失的父目录。
  • -R, -r, --recursive: 递归复制目录。
  • --reflink[=WHEN]: 如果目标文件系统支持,请执行优化的CoW(写时复制)克隆,生成的副本将在磁盘上与原始文件共享相同的字节,直到修改副本为止,请注意这意味着如果源字节已损坏,则目标将共享损坏的数据。
  • --remove-destination: 尝试打开每个目标文件之前,先删除它,与--force选项相反,该选项仅在尝试打开失败后才删除目标文件。
  • --sparse=WHEN: 控制稀疏文件的创建。稀疏文件包含空洞,其中空洞是零字节序列,不占用物理磁盘空间,读取文件时,孔将读取为零。由于许多文件包含长的零序列,因此可以节省磁盘空间,默认情况下,cp检测稀疏文件并创建稀疏目标文件。在当参数定义了cp当检测到源文件是稀疏的行为:auto,如果源稀疏,尝试使目标稀疏,如果目标存在并且是非常规文件,请不要尝试使其稀疏,这是默认值;always,对于源中每个零字节的足够长的序列,即使输入文件不是稀疏的,也要尝试在目标中打稀疏,如果源文件系统不支持稀疏文件,这将可以在目标文件系统上适当地创建一个稀疏文件;never,不使输出文件稀疏,某些特殊文件(例如交换文件)绝对不能稀疏。
  • --strip-trailing-slashes: 删除每个源参数中的所有尾部斜杠。
  • -s, --symbolic-link: 进行符号链接,而不是复制文件本身。除非目标文件位于当前目录中,否则所有源文件都必须是以斜杠开头的绝对路径名。
  • -S, --suffix=SUFFIX: 覆盖通常的备份后缀。
  • -t, --target-directory=DIRECTORY: 将所有源参数复制到目录中。
  • -T, --no-target-directory: 将目的地视为普通文件。
  • -u, --update: 仅在源文件比目标文件新或缺少目标文件时复制。
  • -v, --verbose: 详细模式,解释正在做什么。
  • -x, --one-file-system: 仅在执行命令的文件系统上操作,如果cp试图越过边界到另一个文件系统,则这些文件将被跳过。这包括网络驱动器,驻留在具有不同安装点的文件系统上的任何文件。代表安装点本身的目录将被复制,但不会被遍历。如果指定了-v,则将确切显示已跳过的文件。
  • -Z, --context[=CTX]: 设置目标的SELinux安全上下文,文件为默认类型,或CTX(如果指定)。
  • --help: 显示帮助信息。
  • --version: 显示版本信息。

示例

将文件file.txt复制为file2.txt

cp file.txt file2.txt

递归复制文件夹,将tmp文件夹内容全部复制。

cp -R ./tmp ./tmp2

创建对file.txt的符号链接而不是复制文件,当然使用ln命令是专门为文件创建符号链接的,cp同样是创建符号链接的好方法,注意要在另一个目录中创建符号链接,cp需要在源文件名中指定完整路径名,包括完整目录名,相对路径将不起作用。

cp -s file.txt file-link1

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.computerhope.com/unix/ucp.htm https://linuxize.com/post/cp-command-in-linux/ https://www.runoob.com/linux/linux-comm-cp.html