cp.1

CP(1)

CP(1)

FreeBSD General Commands Manual

CP(1)

cp

复制文件

cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpsvx] source_file target_file cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpsvx] source_file ... target_directory

在第一个概要形式中, cp 实用程序将 source_file 的内容复制到 target_file 。 在第二种概要形式中,每个命名的 source_file 的内容都被复制到目标 target_directory 。 文件本身的名称不会更改。 如果 cp 检测到尝试将文件复制到自身,则复制将失败。

可以使用以下选项:

-H

如果指定了 -R 选项,则遵循命令行上的符号链接。 (不遵循树遍历中遇到的符号链接。)

-L

如果指定了 -R 选项,则遵循所有符号链接。

-P

如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。

-R

如果 source_file 指定一个目录,则 cp 复制该目录和在该点连接的整个子树。 如果 source_file 以 / 结尾,则复制目录的内容而不是目录本身。 此选项还导致复制符号链接,而不是间接通过,并让 cp 创建特殊文件而不是将它们复制为普通文件。 创建的目录与对应的源目录具有相同的模式,不被进程的umask修改。

请注意, cp 将硬链接文件复制为单独的文件。 如果您需要保留硬链接,请考虑使用 tar(1) 、 cpio(1) 或 pax(1) 。

-a

存档模式。与 -RpP 相同。

-f

对于每个现有的目标路径名,将其删除并创建一个新文件,无论其权限如何,都不会提示确认。 ( -f 选项覆盖任何以前的 -i-n 选项。)

-i

导致 cp 在复制将覆盖现有文件的文件之前向标准错误输出写入提示。 如果标准输入的响应以字符 ‘y’ 或 ‘Y’ 开头,则尝试复制文件。 ( -i 选项覆盖任何以前的 -f-n 选项。)

-l

在层次结构中创建指向常规文件的硬链接,而不是复制。

-n

不要覆盖现有文件。 ( -n 选项覆盖任何以前的 -f-i 选项。)

-p

使 cp 保留副本中每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、ACL、用户 ID 和组 ID,由权限允许。

如果无法保留用户 ID 和组 ID,则不会显示错误消息并且不会更改退出值。

如果源文件的 set-user-ID 位打开并且用户 ID 无法保留,则 set-user-ID 位不会保留在副本的权限中。 如果源文件的 set-group-ID 位打开且组 ID 无法保留,则 set-group-ID 位不会保留在副本的权限中。 如果源文件的 set-user-ID 和 set-group-ID 位都打开,并且用户 ID 或组 ID 无法保留,则 set-user-ID 和 set-group-ID 位都不会保留在副本的权限。

-s

在层次结构中创建指向常规文件的符号链接,而不是复制。

-v

使 cp 变得冗长,在复制文件时显示文件。

-x

不遍历文件系统挂载点。

对于每个已经存在的目标文件,如果权限允许,其内容将被覆盖。 除非指定了 -p 选项,否则它的模式、用户 ID 和组 ID 不变。

在第二种概要形式中, target_directory 必须存在,除非只有一个名为 source_file 的目录并且指定了 -R 标志。

如果目标文件不存在,则使用源文件的模式,由文件模式创建掩码 (umask ,参见 csh(1)) 。 修改。 如果源文件的 set-user-ID 位打开,则该位将被删除,除非源文件和目标文件都属于同一用户。 如果源文件的 set-group-ID 位打开,则删除该位,除非源文件和目标文件都在同一个组中并且用户是该组的成员。 如果同时设置了 set-user-ID 和 set-group-ID 位,则必须满足上述所有条件,否则这两个位都将被删除。

创建或覆盖文件需要适当的权限。

除非设置了 -R 标志,否则始终遵循符号链接,在这种情况下,默认情况下不遵循符号链接。 -H-L 标志(与 -R 标志一起)导致符号链接被遵循,如上所述。 除非指定了 -R? 选项,否则 -H -、 -L-P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。

如果 cp 接收到 SIGINFO (参见 stty(1) 的 status 参数)信号,则当前输入和输出文件以及完成百分比将被写入标准输出。

The cp utility exits 0 on success, and >0 if an error occurs.

制作名为 bar 的文件 foo 的副本:

$ cp foo bar

将一组文件复制到 /tmp 目录:

$ cp *.txt /tmp

将目录 junk 及其所有内容(包括任何子目录)复制到 /tmp 目录:

$ cp -R junk /tmp

cp 实用程序的历史版本有一个 -r 选项。 此实现支持该选项,但是,它的行为与历史上的 FreeBSD 行为不同。 强烈建议不要使用此选项,因为该行为取决于实现。 在 FreeBSD 中, -r-RL 的同义词,除非被其他标志修改,否则其工作方式相同。 -r 的历史实现有所不同,因为它们在重新创建层次结构时将特殊文件复制为普通文件。

-l, -s, -v, -x-n 选项是非标准选项,不建议在脚本中使用它们。

mv(1), rcp(1), umask(2), fts(3), symlink(7)

cp 命令预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。

cp 命令出现在 Version 1 AT&T UNIX 中。

June 6, 2015

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区