复制文件或目录
cp [-bcdfHilLnpPsSuv] [-S suffix] [-Z ctxt] [gnu-opts] srcfile destfile
cp [-abcdfHilLnpPsSuv] [-S suffix] [-t dir] [-Z ctxt] [gnu-opts] srcfiles destdir
cp [-abcdfHilLnpPrRsSuv] [-S suffix] [-t dir] [-Z ctxt] [gnu-opts] srcdirs destdir
cp [-abcdfHilLnpPsSuv] [-S suffix] [-t dir] [-Z ctxt] [gnu-opts] -t destdir srcfiles
cp [--help] [--version]
cp命令主要用于复制文件(或目录)。例如,把一个源文件复制到目的文件,或把多个源文件复制到目的目录中。其中,srcfile是源文件的路径名,srcfiles是一个或一组源文件的路径名,destfile是目的文件的路径名(主要用于单个文件复制),srcdirs是一个或一组源目录的路径名,destdir是目的目录的路径名,其中包含复制后的文件。
在第一种语法格式中,源文件和目的文件均为普通文件,而且不能同名。cp命令把源文件的内容复制到命名的目的文件中。如果目的文件存在,将会覆盖其原有的内容,但文件的用户ID、用户组ID、访问权限等属性保持不变,目的文件的修改时间和源文件的访问时间将设置为当前时间。如果目的文件不存在,则按指定的文件路径名创建一个新的文件,且与源文件具有相同的访问权限。如果目的文件是一个符号链接文件,cp将会覆盖其链接的目标文件的内容,但链接关系保持不变。
在第二种和第四种语法格式中,可以把一个或多个源文件复制到指定的目的目录中。
在第三种语法格式中,可以把一个或多个源目录复制到指定的目的目录中。注意,必须同时指定“-r”或“-R”选项。对于每一个源目录,cp将会复制其中的所有文件,包括子目录中的文件。如果指定的目的目录存在,cp命令将会把每个源目录复制到指定的目录中,否则将把源目录整体复制到指定的新目录。
-a, --archive 尽可能多地保持源文件的目录结构与属性,也尝试保持SELinux安全属性与扩充属性,但会忽略与之有关的处理错误。相当于同时指定了“-dR”与“--preserve=all”选项。
-b 类似于“--backup”选项,但不能指定控制参数。
-c 如果可能,保持源文件的SELinux安全属性。这相当于指定了“--preserve= context”选项。注意,某些文件系统并不支持SELinux安全属性。
-d 仅仅复制符号链接文件本身,而不复制其引用的文件。对于硬链接文件而言,保持源文件间的链接计数。这相当于同时指定了“--no-dereference”与“--preserve=links”选项。
-f, --force 如果无法以“写”的方式打开现有的目的文件,复制通常会失败。如果指定了这个选项,cp命令首先会删除目的文件,然后再尝试继续复制文件。注意,如果指定了“-n”选项,则“-f”选项无效。
-H 如果源文件为符号链接文件,使用其引用的文件作为源文件,复制其文件数据。
-i, --interactive 交互复制方式。当指定的目的文件存在时,为防止覆盖原有的文件,cp命令将会提示用户存在同名的文件。仅当用户输入“y”确认之后,cp命令才会继续执行复制;其他的任何回答将会终止文件复制的执行,从而防止覆盖原有的文件(使用“-n”选项可抵消“-i”选项)。
-l, --link 以创建硬链接文件的方式取代文件复制。
-L, --dereference 如果源文件为符号链接文件,使用其引用的文件作为源文件,复制其文件数据。在递归复制模式中,子目录中的符号链接文件也是如此处理。
-n, --no-clobber 禁止覆盖现有的文件(可以抵消“-i”选项的作用)。
-p 确保复制后的文件属性与源文件相同,其效果相当于指定了“--preserve=mode,ownership,timestamps”选项。cp不仅复制源文件的数据,也会保持文件复制后的用户ID、用户组ID、访问权限、修改时间及访问时间等属性不变。为了维持复制后的文件属性,命令发布者必须是超级用户或具有适当的文件访问权限。
-P, --no-dereference 如果源文件为符号链接文件,则复制符号链接文件本身,而非其引用的文件。在递归复制模式中,子目录中的符号链接文件也是如此处理。
-R, -r, --recursive 目录文件递归复制模式。当指定的源文件为目录时,cp命令将会递归地复制目录及其中的任何文件,把指定的目录及其中的所有文件(包括子目录中的文件)复制到指定的目录位置。除非明确指定了“-H”、“-L”或“-P”,否则以“-L”选项作为默认的处理动作。
-s, --symbolic-link 以创建符号链接文件的方式取代文件复制。
-S suffix, --suffix=suffix 备份文件通常是在文件名后面附加一个波浪号“~”后缀,利用这个选项可以指定不同的后缀字符。
-t dir, --target-directory=dir 把所有的源文件复制到指定的目录中。
-u, --update 仅当源文件比目的文件更新或目的文件不存在时,才执行文件复制。
-v, --verbose 显示文件复制的处理过程与动作。
-Z ctxt, --context=ctxt 按照指定的SELinux属性设置复制后的文件。
--backup[=control] 在复制之前,备份现有的任何同名文件,以免覆盖。有效的控制参数包括none或off(不备份)、numbered或t(在备份文件名后面增加数字顺序号)、existing或nil(若存在数字编号的备份文件,使用数字方式,否则采用简单的文件备份方式)及simple或never(采用简短的文件备份方式)。
--copy-contents 在递归复制时,就像复制普通文件一样,可以把特殊文件(如管道文件和设备文件)中的数据内容复制到目的文件中。注意,在多数情况下,“cp -R --copy-contents”命令可能会陷于无尽的等待之中,如果复制的是/dev/zero文件,也可能会耗尽目的磁盘。
--preserve[=attr_list] 复制后的文件应保持指定的属性。默认的属性包括mode(访问权限)、ownership(用户与用户组)和timestamps(时戳)。其他可以指定的属性包括context(SELinux属性)、links(链接)、xattr(扩充属性)及all(所有属性)。
--no-preserve=attr_list 复制后的文件不要保持指定的属性。
--parents 把源文件复制到指定的目录,但要保持源文件的完整路径名。
--remove-destination 在尝试打开之前,删除现有的每一个同名的目的文件(参见“-f”选项)。
--strip-trailing-slashes 删除每个源文件参数中的斜线字符“/”后缀。
1. 复制单个文件。
$ cp atmcom.c atmcom.old $ ls atm* atmcom.c atmcom.old $
2. 把指定目录中的所有文件复制到指定的目录中。
$ cp ~/src/* /mnt/src $
3. 原封不动地复制一个完整的目录,包括其中的所有文件、子目录及其文件。
$ ls save save not found $ cp -r src save $ ls -R save atmmon.c atmcom.c handler.c listener.c $ cp -r src save $ ls -R save atmmon.c atmcom.c handler.c listener.c src: atmmon.c atmcom.c handler.c listener.c $
4. 有意识地增加“-i”选项,防止误删文件。
$ ls atm* atmcom.c atmcom.old $ cp –i atmcom atmcom.old cp: overwrite atmcom.old (yes/no)? y $
索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z