Provided by: manpages-zh_1.5.2-1.1_all
NAME
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 总作简单的备份.
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.
[中文版维护人]
Surran <email>
[中文版最新更新]
2000/10/19
《中国linux论坛man手册页翻译计划》:
http://cmpp.linuxforum.net