cp
在类似Unix的操作系统上,cp命令可复制文件和目录。
查看英文版
1 cp 运行系统环境
2 cp 描述
3 cp 语法
4 cp 例子
cp 运行系统环境
Unix&Linux
cp 描述
该命令的一般形式是cp source destination,例如:
cp myfile.txt myfilecopy.txt
与许多核心Linux命令一样,如果cp命令成功执行,则默认情况下不会显示任何输出。要在复制文件时查看输出,请使用-v(详细)选项。
默认情况下,cp会不询问而覆盖文件。如果目标文件名已经存在,则其数据将被销毁。如果要在覆盖文件之前提示您进行确认,请使用-i(交互式)选项。
查看英文版
cp 语法
cp [option]... [-T] source destination
cp [option]... source... directory
cp [option]... -t directory source...
cp --help
cp --version
选件
-a,- -archive |
与-dR --preserve = ALL相同。执行复制时,请尝试保留尽可能多的原始文件结构,属性和关联的元数据。如果您正在运行SELinux,则此元数据包括安全上下文数据。 | ||||||||||||||
-attributes-only | 不复制文件数据,仅创建具有相同属性的文件。如果目标文件已经存在,请不要更改其内容。您可以使用--preserve选项精确控制要复制的属性。 | ||||||||||||||
--backup [ =control] |
对每个现有目标文件进行备份,否则将被覆盖或删除。该控制参数指定了版本控制的方法来使用; 有关详细信息,请参见版本控制。 作为一种特殊情况,当source和dest是相同的常规文件时,cp --force --backup会备份源。 |
||||||||||||||
-b | 类似于--backup,但不接受控制参数;始终使用默认控制方法。 | ||||||||||||||
--copy-contents | 递归操作时,复制特殊文件的内容,例如FIFO和/ dev中的设备。您通常不希望使用此选项,因为它可能会产生不希望的结果,例如永久挂起或填满整个磁盘。但是,此选项可用于特殊的专业用例。 | ||||||||||||||
-d | 复制符号链接本身(而不是它们引用的文件),并保留副本中源文件之间的硬链接。与“ --no-dereference --preserve = links ”相同。 | ||||||||||||||
-f, --force |
如果无法打开现有的目标文件,请将其删除,然后重试。如果使用-n / --no-clobber选项,则此选项无效。但是,它独立于-i / --interactive来应用;这两个选项都不能消除另一个的影响。 | ||||||||||||||
-i,-- interactive |
覆盖前提示(覆盖先前的-n选项)。 | ||||||||||||||
-H |
遵循命令行上指定的符号链接,但保留发现的链接。 如果命令行上的参数之一是符号链接,请复制引用的文件,而不是链接本身。但是,如果在递归遍历过程中发现符号链接,则会将其作为符号链接而不是常规文件进行复制。 |
||||||||||||||
-l,-- link |
创建指向文件的硬链接,而不是复制它们。 | ||||||||||||||
-L,-- dereference |
始终遵循源代码中的符号链接; 如果source是符号链接,请复制链接到的文件,而不是符号链接本身。指定此选项后,cp无法在目标副本中创建符号链接。 | ||||||||||||||
-n,-- no-clobber |
不要覆盖现有文件。如果先前指定了-i / --interactive,则此选项将覆盖它。不能使用-b / --backup来指定此选项,因为仅在文件被覆盖时才创建备份。 | ||||||||||||||
-P, --no-dereference |
切勿遵循源代码中的符号链接; 将符号链接复制为符号链接。但是,仍然可以遵循目标中遇到的现有符号链接。 | ||||||||||||||
-p | 与--preserve = mode,ownership,timestamps相同。 | ||||||||||||||
--preserve = [ attr_list ] |
保留指定的属性,以逗号分隔。属性是:
|
||||||||||||||
--no-preserve = attr_list | 不要保留指定的属性。 | ||||||||||||||
--parents |
如果需要,在复制到目标目录时,根据source中指定的路径名,在目标中创建丢失的父目录。 例如,“ cp --parents dir2 / dir3 / file dir1 ”创建目标文件“ dir1 / dir2 / dir3 / file ”,即使dir1下目前不存在dir2和dir3。 |
||||||||||||||
-R, -r,--recursive |
递归复制目录。 | ||||||||||||||
--reflink = [when] |
如果目标文件系统支持,请执行优化的CoW(“写时复制”)克隆。生成的副本将在磁盘上与原始文件共享相同的字节,直到修改副本为止。请注意,这意味着如果源字节已损坏,则目标将共享损坏的数据。 在当参数定义写入时复制不是由文件系统的目的地支持会发生什么。如果当是always(默认值),复制失败。如果为auto,将使用标准复制行为进行复制。 |
||||||||||||||
--remove-destination | 尝试打开每个目标文件之前,先删除它(与--force选项相反,该选项仅在尝试打开失败后才删除目标文件)。 | ||||||||||||||
--sparse =when |
控制稀疏文件的创建。 稀疏文件包含“空洞”,其中的空洞是零字节序列,不占用物理磁盘空间。读取文件时,孔将读取为零。由于许多文件包含长的零序列,因此可以节省磁盘空间。缺省情况下,cp检测稀疏文件并创建稀疏目标文件。 在当参数定义了CP当检测到源文件是稀疏应该做的:
|
||||||||||||||
--strip-trailing-slashes | 从每个源参数中删除所有结尾的斜杠。 | ||||||||||||||
-s,--symbolic-link |
进行符号链接,而不是复制文件本身。除非目标文件位于当前目录中,否则所有源文件都必须是以斜杠开头的绝对路径名。 | ||||||||||||||
-S,--suffix =suffix |
覆盖通常的备份后缀。 | ||||||||||||||
-t,-- target-directory =directory |
将所有源参数复制到目录中 | ||||||||||||||
-T,-- no-target-directory |
将目的地视为普通文件。 | ||||||||||||||
-u, --update |
仅在源文件比目标文件新或缺少目标文件时复制。 | ||||||||||||||
-v,-- verbose |
详细模式;解释正在做什么。 | ||||||||||||||
-x, --one-file-system |
仅在执行命令的文件系统上操作。如果cp试图越过边界到另一个文件系统,则这些文件将被跳过。这包括网络驱动器,另一个分区-驻留在具有不同mount点的文件系统上的任何文件。 代表安装点本身的目录被复制但未被遍历。 如果指定了-v,您将确切看到跳过了哪些文件。 |
||||||||||||||
--help | 显示帮助消息,然后退出。 | ||||||||||||||
--version | 输出版本信息,然后退出。 |
默认情况下,稀疏的启发式算法会检测到稀疏的源文件,并且相应的目标文件也会变得稀疏。这是--sparse = auto选择的行为。指定--sparse = always总是在源文件包含足够长的零字节序列时创建稀疏目标文件。使用--sparse = never禁止创建稀疏文件。
当--reflink [ =always]被指定时,CP执行轻型副本,其中所述数据块改性时仅复制。如果不可能,则复制失败;否则,复制将失败。或者,如果指定了--reflink = auto,则cp将退回到标准复制操作。
版本控制
使用-b / --backup时,备份后缀为' 〜 ',除非使用--suffix或SIMPLE_BACKUP_SUFFIX进行设置。可以通过--backup =控制选项或通过VERSION_CONTROL 环境变量来选择版本控制方法。控制或VERSION_CONTROL的可能值为:
none,off | 切勿进行备份(即使给出了--backup)。 |
numbered,t | 进行编号备份。 |
existing,nil | Numbered是否存在编号备份,simple说明。 |
simple,never | 始终进行简单的备份。 |
作为一个特例,CP使备份源时,force和backup选项给出的源和目的是相同的名称为现有,普通文件。
查看英文版
cp 例子
假设您的工作目录中有一个名为picture.jpg的文件,并且您想要复制一个名为picture-02.jpg的文件。您将运行以下命令:
cp picture.jpg picture-02.jpg
...然后文件被复制。在这里,picture.jpg是复制操作的源,而picture-02.jpg是目标。这两个文件现在都存在于您的工作目录中。
源文件和目标文件也可以位于不同的目录中。例如,
cp /home/chuck/pictures/picture.jpg /home/chuck/backup/picture.jpg
...在目录/ home / chuck / backup中复制文件/home/chuck/pictures/picture.jpg。目标文件也命名为picture.jpg。
如果您是用户chuck,则可以使用代字号(“ 〜 ”)缩写主目录(“ / home / chuck ”)。例如,
cp〜/ pictures / picture.jpg〜/ backup / picture.jpg
...由chuck运行时,其功能与上述命令相同。
将多个文件复制到目录
或者,也许您要将多个文件复制到另一个目录。为此,您可以指定多个文件作为源,并指定目录名作为目标。假设您是sally的用户,并且在/ home / sally / pictures /目录中有一堆文件,名为picture-01.jpg,picture-02.jpg等,您想将它们复制到目录home/ sally /picture/backup/中。这个命令可以解决问题:
cp〜/ pictures / picture-*。jpg〜/ picture-backup
在这里,我们使用通配符(星号“ * ”)表示源文件是目录/ home / sally / pictures中所有名称以“ picture- ”开头且扩展名为“ .jpg ”的文件。假设该目录已存在,它们将被复制到目录/ home / sally / picture-backup中。如果不存在,cp会给您一条错误消息,并且不会复制任何文件。
您还可以一个接一个地指定多个源文件,并且cp期望final参数是目录名,然后将它们全部复制到该目录中。例如,
cp〜/ pictures / picture-01.jpg〜/ pictures / picture-02.jpg〜/ picture-backup
...只会将/home/sally/picture-01.jpg和/home/sally/picture-02.jpg这两个文件复制到目录/ home / sally / picture-backup中。
递归复制文件
您可以使用-r选项使用cp将整个目录结构从一个位置复制到另一个位置,以执行递归复制。假设您是steve用户,并且有一个目录/ home / steve / files,其中包含许多文件和子目录。您想要将所有这些文件以及所有子目录(及其包含的文件和子目录)复制到新位置/ home / steve / files-backup。您可以使用以下命令复制所有文件:
cp -R〜/文件〜/文件备份
...并将整个目录结构复制到目录/ home / steve / files-backup。执行递归复制时:
- 如果目录文件备份已经存在,则目录文件将放置在其中。
- 如果文件备份并不会存在,它将会被创建和内容的的文件目录将放在里面。
创建符号链接,而不是复制数据
另一个有用的技巧是使用cp创建到源文件的符号链接。您可能已经熟悉使用ln命令创建符号链接。cp是一次创建多个符号链接的好方法。
如果指定-s选项,则cp将创建符号链接。因此,例如
cp -s file.txt file2.txt
...创建一个符号链接file2.txt,它指向file.txt。
您还可以从多个源文件创建符号链接,将目录指定为目标。
要在另一个目录中创建符号链接,cp需要您在源文件名中指定完整路径名,包括完整目录名。相对路径将不起作用。
假设您是melissa用户,并且在/ home / melissa / myfiles目录中有一组文件file01.txt,file02.txt等。您想要在现有目录/ home / melissa / myfiles2中创建指向这些文件的符号链接。这个命令可以解决问题:
cp -s〜/ myfiles / file * .txt〜/ myfiles2
现在,目录myfiles2包含指向目录/ home / melissa / myfiles中的文件* .txt的符号链接。该myfiles2目录必须已经存在,操作成功; 如果不存在,cp会给您一条错误消息,并且不会复制任何内容。
这也将与递归副本一起使用。所以命令:
cp -R -s〜/ myfiles〜/ myfiles2
...将重新创建/ home / melissa / myfiles的目录结构,包括所有子目录及其内容;任何文件都将创建为原始文件的符号链接,但目录不是符号链接,而只是常规目录。如果myfiles2已经存在,则cp在其中创建一个名为myfiles的目录,其中包含目录结构和符号链接;如果myfiles2还不存在,它将被创建,并包含指向myfiles包含的文件的子目录和符号链接。
您可以为cp提供其他选项,以影响其行为。以下各节中列出了这些命令以及精确的命令语法。
将文件复制到同一目录
cp origfile新文件
在名为origfile的工作目录中创建文件的副本。该副本将被命名为newfile,并将位于工作目录中。
查看英文版
未知的网友