cp指令是用于Linux中文件复制的命令,后面可接选项和参数,形如:command [options] [arguments] ,其中options 用于控制命令的行为,arguments表示命令的参数。cp命令可以将多个源路径的文件复制到一个目标路径中,多个源路径使用空格隔开,目标路径放在最后1。

用法

cp [options] 源文件 目标文件

cp [options] 源文件1 源文件2 源文件3 …… 目标目录

cp [options] 源目录1 源目录2 源目录3 …… 目标目录

选项说明

**-a,--archive:**相当于 -dR -preserve=all

**--attributes-only:**仅仅复制属性而不复制文件的数据部分

**--backup[=control]:**为每个存在的目标文件进行备份,例如:如果目标文件try.txt已经存在的话,备份文件就是try.txt~。备份文件的后缀为 "~",除非使用了 --suffix 选项或 SIMPLE_BACKUP_SUFFIX 环境变量指定了其他后缀。版本控制的方式可通过 --backup 选项或 VERSION_CONTROL 环境变量来选择。以下是control可用的设置值:

**none, off :**不进行备份(即使使用了 --backup 选项)

**numbered, t :**使用带有数字编号的备份文件进行备份

existing, nil : 若带数字的备份文件已经存在则使用 numbered,否则使用 simple

simple, never : 总是使用简单方式进行备份

-b : 类似--backup 只不过不能接受参数

**--copy-contents :**在递归操作时复制特殊文件的内容

**-d :**等于 --no-dereference --preserve=links。

-f, --force: 如果已存在的目标文件无法打开,则将其删除并重试(该选项在与 -n 选项同时使用时将被忽略)

-i, --interactive: 覆盖前询问(使前面的 -n 选项失效)

**-H:**跟随命令行里的 <源> 中的符号链接

**-l, --link:**硬链接文件以代替复制

**-L, --dereference:**总是跟随 <源> 里的符号链接

**-n, --no-clobber:**不要覆盖已存在的文件(使前面的 -i 选项失效)

**-P, --no-dereference:**从不跟随 <源> 中的符号链接

-p: 等于--preserve=mode,ownership,timestamps

**--preserve[=属性列表]:**如果可能的话,保留指定的属性(默认:mode,ownership,timestamps)其他属性:context、links、xattr、all

**--no-preserve=属性列表:**不保留指定的属性

**--parents:**在 <目录> 下使用完整的源文件路径

**-R, -r, --recursive:**递归地复制目录

**--reflink[=when]:**控制克隆/CoW 副本。当指定了 --reflink[=always] 参数时,将进行轻量级复制,此时数据块只在被修改时进行复制。如果因无法进行这种复制而导致复制失败,或者指定了 --reflink=auto,程序将会回退到标准复制操作。使用 --reflink=never 可以确保永远进行标准复制。

**--remove-destination:**尝试打开目标文件前先删除已存在的目标文件(和 --force 选项有区别)

**--sparse=when:**控制创建稀疏文件的方式。默认情况下,将通过简单的启发式算法检测稀疏的<源> 文件,并将对应的 <目标>文件设为稀疏。这也是 --sparse=auto 的行为。若使用 --sparse=always,则只要<源> 文件包含了足够长的零字节序列,都会将 <目标> 文件创建为稀疏文件。使用 --sparse=never 可以禁止创建稀疏文件。

**--strip-trailing-slashes:**删除参数中所有 <源> 末尾的斜杠

**-s, --symbolic-link:**只创建符号链接而不复制文件

**-S, --suffix=后缀:**自行指定备份文件的后缀(与—backup命令有关)

**-t, --target-directory=目录:**将所有 <源> 参数复制到 <目录>

**-T, --no-target-directory:**将 <目标> 视为普通文件

**-u, --update:**只在 <源> 比目标文件新,或目标文件不存在时才进行复制

**-v, --verbose:**显示详细步骤

**-x, --one-file-system:**不跨越文件系统进行操作

**-Z:**设置目标文件的 SELinux 安全上下文为默认类型

**--context[=CTX]:**类似 -Z,但如果指定了 < CTX >,则将 SELinux或 SMACK 安全上下文设置为 < CTX >

**--help:**显示此帮助信息并退出

**--version:**显示版本信息并退出

使用范例

复制一个文件夹的全部信息:cp -a folder1 folder2

仅仅复制文件的属性部分不复制数据部分: cp --attributes-only file1 file2

如果VERSION_CONTROL环境变量的值没有被指定,-b的默认值是‘existing’,也就是相当于—backup=existing。除非设置了—suffix 或者 SIMPLE_BACKUP_SUFFIX,备份文件后缀为‘~’

-b与—backup不同,-b不接受任何参数,也就是说-b=existing是错误的用法

cp -b file1.txt file2.txt

cp –backup=existing file1.txt file2.txt

如果file2.txt已经存在,那么备份文件为file2.txt~

当参数为none 或者off时不进行备份操作,此时目标文件将会被覆写,丢失原来的内容:

cp –backup=none file1.txt file2.txt

cp –backup=off file1.txt file2.txt

当参数指定为numbered 或者 t 时,对备份文件后缀加编号

cp –backup=numbered file1.txt file2.txt

cp –backup=t file1.txt file2.txt

备份文件为file2.txt.~1~,如果后续继续复制到file2.txt则会继续产生备份文件,名如:file2.txt.~2~,file2.txt.~3~,file2.txt.~4~等等。编号备份可以有多个文件,但是普通备份只有一个文件file2.txt~。

当参数指定为existing 或者 nil时,已经进行编号备份的文件进行编号备份,其余的进行普通备份

cp –backup=existing file1.txt file2.txt

cp –backup=nil file1.txt file2.txt

当参数指定为simple 或者never时,总是进行普通备份

注意never 和none 的区别

cp –backup=simple file1.txt file2.txt

cp –backup=never file1.txt file2.txt

将文件file1强制复制成file2,不会询问是否覆盖

当目标文件无法打开或者没有写入权限的时候,复制命令会失败

当-n选项被指定的时候-f会失效

cp -f file1 file2

采用交互方式将文件file1复制成文件file2(如果file2已经存在会询问是否覆盖,输入y表示覆盖,输入n表示不覆盖)

cp -i file1 file2

建立硬链接文件,并没有复制文件,内存空间中仅仅是一份文件内容。硬链接是目标文件的一个直接引用,它与原始文件在文件系统中共享相同的 inode。换句话说,硬链接是目标文件的另一个名称。

硬链接和源文件具有相同的inode,即使原始文件被删除,硬链接仍然存在,直到所有链接都被删除。

cp -l file1 file1_hlink

复制的时候不要覆盖目标文件,会使-f选项失效

cp -n file1 file2

保留文件的附加信息。例如时间戳所有者权限

-p 相当于—preserve=mode,ownership,timestamps

cp -p file1 file2

mode,ownership,timestamps这些文件属性可单独指定保留哪些,通过—preserve=[属性列表]来指定。

cp –preserve=mode file1 file2

cp –preserve=ownership file1 file2

cp –preserve=timestamps file1 file2

将目录dir1复制成目录dir2(复制目录内容时必须加上-R)

注意:用户使用该指令复制目录时,必须使用参数 -r 或者 -R 。

cp -R file1 file2

建立软链接文件(相当于window下的快捷方式,本质不是文件)

软链接是一个指向目标文件或目录的符号链接,实际上是一个特殊类型的文件,其中包含目标文件的路径。软链接类似于 Windows 中的快捷方式。软链接和源文件具有不同的 inode,它们的链接性质是弱的,如果原始文件或目录被删除或移动,软链接将失效。

cp -s file1 file1_slink

复制文件,只有源文件比目标文件的修改时间新或者目标文件不存在时,才复制文件

cp -u file1 file2

同时将文件file1、file2、file3与目录dir1复制到dir2

注意,只有最后一个才是目标路径,前面的都是源路径cp -R file1 file2 file3dir1 dir2

来源: 百度百科

内容资源由项目单位提供