cp - 复制文件和目录
总览
cp [选项] 文件路径
cp [选项] 文件...目录
POSIX 选项: [-fipRr]
GNU 参数(最短形式): [-abdfilprsuvxPR] [-S SUFFIX] [-V {numbered,existing,simple}] [--sparse=WHEN] [--help] [--version] [--]
描述
cp 复制文件(或者目录等). 可以使用这个命令复制一个文件到一个指定的目的地, 或者复制任意多个文件到一个目的目录目录.
如果最后一个命令参数为一个已经存在的目录名, cp 会将每一个源 文件 复制到那个目录下(维持原文件名). 如果所给的参数只有两个文件名.它把前一个文件复制到后一个文件上. 如果最后一个参数不是文件名,目录名,和给出多于两个非选项参数,是错误的.
(因而:如果/b已经存在,那么'cp -r /a /b'会复制/a到/b而成为/b/a. 而复制/a/x到/b而成为/b/a/x.但如果/b事先不存在,它会把/a复制为/b 而复制/a/x到/b而成为/b/a/x.但如果/b事先不存在,它会把/a复制为/b 而把/a/x复制为/b/x.)
所创建的文件和/或目录的模式和原始的文件的模式是一样的,然后用用户umask值修改(除非使用了-p选项),(但在递归方式复制目录时,新建目录会临时地获得他们的最终模式Ored,连同 S_IRWXU(0700),以便进程能够读、写、查找这些新建的目录.
复制文件到其自身时它什么事情都不做(除了可能会生成一条错误信息以外). 当复制到一个现存的不同文件时,系统调用函数 `open(path,O_WRONLY|O_TRUNC)'打开目的文件.当复制到一个新文件时,系统调用函数`open(path,O_WRONLY|O_CREAT,mode)'创建该文件.如果这操作失败,该文件存在,和给出了-f选项, cp 试图先删除该现存文件,如果删除成功则把它当做一个新文件处理.
POSIX 选项
POSIX 识别四个半选项:
- -f
- 如果需要,删除已存在的目的文件.(如前所述.)
- -i
- 提示是否覆盖现有普通目标文件。 (在标准出错上显示问题,从标准输入读取答案.只有明确确认了才复制文件.)
- -p
- 保留原文件的所有者、组、权限(包括 setuid 和 setgid 位),上次修改时间和上次访问时间。如果制作所有者或组信息的副本时出错,则 setuid 和 setgid 位被清空。(要不然源文件和副本的上次访问时间显然是不同的,因为复制操作就是对源文件的访问.)
- -R
- 递归复制目录,如果对象不是普通文件或目录那么做相应正确处理,(因此,一个 FIFO或者特殊文件在复制后仍然是一个 FIFO型或者相应特殊文件。)
- -r
- 递归复制目录,如果对象不是普通文件或目录那么做一些未声明处理.(因此,我们允许并鼓励用 -r 选项做 -R 的同义词.不过那些愚蠢的特征,象那些在 GNU 版本的 cp 出现的(见下文)也可以用.)
GNU 细节
通常,读写文件的方式都是一样的.例外情况见下面的 --sparse 选项.
缺省情况下,`cp'并不复制目录(参见下文 -r 选项说明).
cp 通常不会复制文件到自身,但有以下例外:如果参数 --force --backup 与 源文件 一起给出,并且与 目的文件 并且指向一个普通文件, cp 将生成一个备份文件,不是普通的就是编了号的,就象通常的方法那样声明.在你仅仅想对已有的文件进行备份, 而又不想修改它的时候很有用.
GNU 选项
- -a, --archive
- 复制时,尽可能保持文件的结构和属性.(但不保持目录结构)等同于 -dpR。
- -d, --no-dereference
- 复制符号链接作为符号链接而不是复制它指向的文件, 并且保护在副本中原文件之间的硬链接.
- -f, --force
- 删除存在的目标文件。(较:原译文缺下面的部分)
- -i, --interactive
- 无论是否覆盖现存文件都作提示。
- -l, --link
- 制作硬链接代替非目录拷贝。
- -p, --preserve
- 保持原始文件的所有者,组,许可,和时间表属性。
- -P, --parents
- 一个斜杠和指定的源文件名构成目的文件。最后送给 cp 的参数必须是一个已存在的目录的名字。例如, 下面这个命令:
cp --parents a/b/c existing_dir
复制文件 `a/b/c' 到 texisting_dir(现有的目录)/a/b/c',建立任何缺少的中间目录。
- -r
- 递归地复制目录,复制任何非目录和非符号链接(那是, FIFOs和特别文件)好象他们是常规的文件一样看待.这意味着尝试读出每个源文件的数据,和把它写到目的地上.因而,用这个选项,cp'可能彻底地终止,当不确定地读一个FIFO或者/dev/tty时,(这是一个缺陷.它意味着如果你不知道在这棵树(目录)中有什么要复制的时候, 你不得不避开-r并使用-R打开一个未知的设备文件, 比如说一台扫描仪,会有未知的效果发生在硬件上)
- -R, --recursive
- 递归地复制目录,保留非目录(参见上面的 -r ).
- --sparse=WHEN
- 一个稀疏file'包容`holes'-占用0字节,它不占用任何物理块;系统把他们作为0调用read'来读.由于许多二进制文件包容许多连续的0字节,这样能保存相当的磁盘空间并且加快速度.省缺情况下, cp 通过自然的启发方式发现在源文件里holes并且使相关的输出文件稀疏.
-
WHEN 值能够是下面中的一个:
- auto
- 默认的行为:如果输入文件是稀疏的,输出文件也是稀疏的.
- always
- 总是使输出文件稀疏.当输入文件所在的文件系统不支持稀疏文件的时候,这是有用的,但是输出文件所在的文件系统需要(支持稀疏文件).
- never
- 从不使输出文件稀疏.如果你找到一个需要此选项的应用程序,让我们知道.
-
- -s, --symbolic-link
- 生成符号链接代替非目录拷贝.所有的源文件名必须是绝对的(由`/'开始),除非目的文件是在当前目录.这选项仅仅在系统不支持符号链接时引起一个错误消息.
- -u, --update
- 如果存在的目的地有相同的,或者更新的修改时间,不复制非目录(文件).
- -v, --verbose
- 在复制前印出文件名.
- -x, --one-file-system
- 跳过来自不同文件系统的子目录.
GNU 备份选项
GNU 版本程序象 cp, mv, ln, install 和 patch 会在覆盖,改变,或者破坏(文件)前生成一个备份文件. 那个文件由-b选项给出.他们的由-V选项命名.一般情况下备份文件名是源文件名加上后缀,这个后缀由-S 指定.
- -b, --backup
- 生成关于覆盖和删除的备份.
- -S SUFFIX, --suffix=SUFFIX
- 加入 SUFFIX(后缀) 到每个备份文件. 如果不指定,使用 SIMPLE_BACKUP_SUFFIX 环境变量的值.如果连 SIMPLE_BACKUP_SUFFIX 都没有设置,省缺是`~'.
- -V METHOD, --version-control=METHOD
- 指定如何命名备份文件. METHOD 能够是 `numbered' (or `t'), `existing' (or `nil'), or `never' (or `simple'). 如果不指定,使用 VERSION_CONTROL 环境变量的值.如果 VERSION_CONTROL 也没有设置,省缺备份文件类型是 `existing'.
这选项相应Emacs 变量 `version-control'. 有效的 METHODs 是(接受唯一的缩写):
- t, numbered
- 总是产生编号的备份。
- nil, existing
- Make numbered backups of files that already have them, simple backups of the others.
- never, simple
- 总作简单的备份.
- 指定如何命名备份文件. METHOD 能够是 `numbered' (or `t'), `existing' (or `nil'), or `never' (or `simple'). 如果不指定,使用 VERSION_CONTROL 环境变量的值.如果 VERSION_CONTROL 也没有设置,省缺备份文件类型是 `existing'.
GNU 标准选项
- --help
- 印出用法并退出.
- --version
- 印出版本信息并退出.
- --
- 结束选项列表.
环境(参数)
变量LANG,LC_ALL,LC_COLLATE,LC_CTYPE和LC_MESSAGES有通常意义. 对于GNU版本,变量SIMPLE_BACKUP_SUFFIX和VERSION_CONTROL控制备份文件命名.与上面的描述一样.
适用到
POSIX 1003.2
注意
这份 cp 的描述和FILEUTils-4.0中找到的是一样的;另外的版本也许有些微的差别.修正和新增邮到aeb@cwi.nl. 报告缺陷到fileutils-bugs@gnu.ai.mit.edu.
#p#
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... --target-directory=DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
- -a, --archive
- same as -dpR
- --backup[=CONTROL]
- make a backup of each existing destination file
- -b
- like --backup but does not accept an argument
- --copy-contents
- copy contents of special files when recursive
- -d
- same as --no-dereference --preserve=link
- --no-dereference
- never follow symbolic links
- -f, --force
- if an existing destination file cannot be opened, remove it and try again
- -i, --interactive
- prompt before overwrite
- -H
- follow command-line symbolic links
- -l, --link
- link files instead of copying
- -L, --dereference
- always follow symbolic links
- -p
- same as --preserve=mode,ownership,timestamps
- --preserve[=ATTR_LIST]
- preserve the specified attributes (default: mode,ownership,timestamps) and security contexts, if possible additional attributes: links, all
- --no-preserve=ATTR_LIST
- don't preserve the specified attributes
- --parents
- append source path to DIRECTORY
- -P
- same as `--no-dereference'
- -R, -r, --recursive
- copy directories recursively
- --remove-destination
- remove each existing destination file before attempting to open it (contrast with --force)
- --reply={yes,no,query}
- specify how to handle the prompt about an existing destination file
- --sparse=WHEN
- control creation of sparse files
- --strip-trailing-slashes remove any trailing slashes from each SOURCE
- argument
- -s, --symbolic-link
- make symbolic links instead of copying
- -S, --suffix=SUFFIX
- override the usual backup suffix
- --target-directory=DIRECTORY
- move all SOURCE arguments into DIRECTORY
- -u, --update
- copy only when the SOURCE file is newer than the destination file or when the destination file is missing
- -v, --verbose
- explain what is being done
- -x, --one-file-system
- stay on this file system
- --help
- display this help and exit
- -Z, --context=CONTEXT
- set security context of copy to CONTEXT
- --version
- output version information and exit
By default, sparse SOURCE files are detected by a crude heuristic and the corresponding DEST file is made sparse as well. That is the behavior selected by --sparse=auto. Specify --sparse=always to create a sparse DEST file whenever the SOURCE file contains a long enough sequence of zero bytes. Use --sparse=never to inhibit creation of sparse files.
The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. The version control method may be selected via the --backup option or through the VERSION_CONTROL environment variable. Here are the values:
- none, off
- never make backups (even if --backup is given)
- numbered, t
- make numbered backups
- existing, nil
- numbered if numbered backups exist, simple otherwise
- simple, never
- always make simple backups
As a special case, cp makes a backup of SOURCE when the force and backup options are given and SOURCE and DEST are the same name for an existing, regular file.
AUTHOR
Written by Torbjorn Granlund, David MacKenzie, and Jim Meyering.
REPORTING BUGS
Report bugs to <bug-coreutils@gnu.org>.
COPYRIGHT
Copyright © 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
SEE ALSO
The full documentation for cp is maintained as a Texinfo manual. If the info and cp programs are properly installed at your site, the command
- info coreutils cp
should give you access to the complete manual.