Linux cp 命令的15个示例 - 创建文件和目录的副本

拷贝文件和目录是每一个操作系统的基本指令。备份行为基本上是创建文件和目录的副本。在Linux系统下,我们可以用cp命令来实现。

copy 命令是什么

正如我们在上文提到的,cp是一个用来创建文件和目录副本的命令。在这里我们提供了一些在日常操作中可能用到的cp命令的实例。

1. 不带任何参数下,运行cp

这是 cp 命令最基础的使用。 拷贝名为 myfile.txt 从一个位置到另一个位置,我们可以像这样子输入:


  1. $ cp myfile.txt /home/pungki/office

Copy without options

如果我们没有输入绝对路径,这意味着我们正在当前目录下拷贝一个文件。在上面的实例中,myfile.txt位于/home/pungki/Documents目录下。如果我们当前目录正是/home/pungki/Documets,那么没有必要输入/home/pungki/Documents/myfile.txt来拷贝文件。当/home/pungki/office是一个目录,则文件会拷贝到里面。

2. 同时拷贝多个文件

要在同时拷贝多个文件,我们只需要将多个文件用空格隔开。如下示例:


  1. $ cp file_1.txt file_2.txt file_3.txt /home/pungki/office

Copying multiple files

3. 拷贝一个目录

要拷贝一个目录的话会有点棘手。你需要添加 -r 或者 -R 选项来实现。-r或-R 选项表明递归操作。无论该目录是否为空目录,这个选项都是必要的。如下示例:


  1. $ cp -r directory_1 /home/pungki/office

Copy directory

需要注意的一件事,你需要移除在目录名尾部的斜杠。否则你会收到类似的错误信息cp: omitting directory‘directory_1/’

Copy directory error

如果你收到错误信息,则目录不会被拷贝到目标文件夹。

4. 创建文件的硬链接,而不是拷贝它们

拷贝文件意味着你必须使用一些存储空间来储存拷贝的文件。有时候出于某种原因,你可能想要创建“快捷方式”或者链接到文件,而不是拷贝它们。要做到这一点,我们可以使用-l选项。


  1. $ cp -l file_4.txt /home/pungki/office

Copy hardlinks

从上图看出,我们看到file_4.txt的硬链接已经拷贝到/home/pungki/office/file_4.txt。标记有同样的 inode,835386。但是请注意,硬链接不能用来创建目录。下面让我们看一个例子。

原目录 directory_1 的 inode 值是 278230

原文件 file_5.txt 的 inode 值是 279231

对 directory_1 执行 cp 命令

拷贝的 directory_1副本的 inode 值是 274800

拷贝的 file_5.txt副本的 inode 值是 279231。跟它的原文件一样

Inode number of copied file

5. 创建文件的符号链接

也有一种链接叫做 软链接 或 符号链接。我们用 -s 选项来实现。下面是命令的示例。


  1. $ cp -s /home/pungki/Documents/file_6.txt file_6.txt

创建符号链接只能在当前目录下进行。在上面的截图中,我们想要创建符号链接 /home/pungki/office/file6.txt 指向原文件 /home/pungki/Documents/file6.txt。但是为了创建符号链接,我必须在将/home/pungki/office作为目标目录。一旦我设法进入目录,我就可以向上面一样运行 cp -s 命令。

现在你列出文件详情,你会看到/home/pungki/office/file_6.txt指向了原文件。在其文件名后标记了箭头符号。

Symbolic links

6. 不随符号链接拷贝原文件

[译注:意思是只拷贝符号链接文件]

我们可以用 -P 选项来实现。当对符号链接使用 cp 命令,它会照原样拷贝它自身。来看看下面的示例。


  1. $ cp -P file_6.txt ./movie

Copy using -P option

如你所见,cp 命令照原样拷贝file_6.txt自身。文件类型仍然是一个符号链接。

7. 随符号链接拷贝原文件

现在我们可以试一下-L选项。基本上,这个刚好与上面的 -P 选项 相反。下面是个示例:


  1. $ cp -L file_6.txt ./movie

Copy using -L option

使用这个选项,拷贝的文件将会和file_6.txt原文件一样。我们可以从文件大小看出来。拷贝的文件有50 字节而当file_6.txt作为符号链接时文件大小只有33 字节。

8. 文件归档

当我们去拷贝一个目录时,我们会用-r或者-R选项。但是我们也可以用-a选项来归档文件。这样会创建文件和目录的准确套录,如果有的话也可以包括符号链接。下面是示例:[译注:-a 会保留原文件或目录的属性]


  1. $ cp -a directory_1/ /home/pungki/office

Copy using -a option

上列的命令会拷贝一个名为 directory1 的目录到/home/pungki/office目录下。如你所见,**file6.txt**依然作为符号链接被复制。

9. 显示正在做什么

默认情况下,当拷贝作业成功时,我们仅仅会再次看到命令提示符。如果你想了解在拷贝文件时都发生了什么,我们可以用 -v 选项。


  1. $ cp -v *.txt /home/pungki/office

Verbose option

当我们从当前目录下拷贝所有的 txt 文件到 /home/pungki/office 目录,-v选项会显示正在操作的过程。这些额外的信息会帮助我们了解更多拷贝过程。

10. 当原文件较目标文件新时拷贝

我们用 -u选项来实现。下面是具体示例:


  1. $ cp -vu *.txt /home/pungki/office

Copy only if newer

起初我们看到file_1.txt 是0字节大小。然后我们用 vi 编辑,加入一些内容并保存。接下来,我们发现文件大小已经变为了 36 个字节。 与此同时在/home/pungki/office目录中,我们已经包含了所有txt文件。当我们用 -u 选项,结合 -v 选项来查看具体操作,cp 命令会只拷贝比目标目录下新的文件。因此,我们看到只有 file_1.txt 拷贝到 /home/pungki/office 目录下。

11. 使用交互模式

交互模式下会询问是否覆盖目标目录下的文件。使用 -i 选项,启用交互模式。


  1. $ cp -ir directory_1/ /home/pungki/office/

Interactive mode

12. 创建备份文件

当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件。使用 --backup 选项,cp 命令会为每一个现有的目标文件做一个备份。../office 相对于 /home/pungki/office 。下面是示例:


  1. $ cp --backup=simple -v *.txt ../office

Backup option

正如我们看到的,--backup=simple 选项会创建一个在文件名末尾用波浪符标记(~)的备份文件。--backup 选项也有一些其他控制:

  • none, off:从不备份(即使给出 --backup)
  • numbered, t:用编号备份
  • existing, nil :如果编号备份存在则使用编号备份,否者用简易备份[译注:也就是用波浪号]
  • simple, never :总是使用简易备份

13. 只拷贝文件属性

cp 命令也提供给我们 --attributes-only 选项。顾名思义,这个选项只会拷贝文件名及其属性,不会拷贝任何数据。下面是示例:


  1. $ cp --attributes-only file_6.txt -v ../office

Copy attributes only

从上图看出, 原文件 file_6.txt 有 50 字节大小。用了 --attributes-only选项,拷贝的文件只有0字节大小。这是因为文件内容并没有拷贝。

14. 强制拷贝

用了 -f 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 -f 尝试一下。


  1. $ cp -f *.txt -v ../office

Copy with force

15. 在拷贝之前先删除目标

我们可以用,--remove-destination 选项 实现。这个选项与上面的-f选项形成对照。如果 cp 命令在目标目录下发现同名文件, cp 命令会先删除目标文件,然后再拷贝一份新的。下面是示例:


  1. $ cp --remove-destination *.txt -v ../office

Remove destination option

总结

cp 命令是 Linux 下最基础的命令之一。对于那些想要学习 Linux 的人,必须得把这个命令掌握。当然你也可以在你的终端下键入 man cp 或者 cp --help 来显示更多帮助信息。

原文发布时间为:2014-03-14

本文来自合作伙伴“Linux中国”

时间: 2025-01-21 11:10:05

Linux cp 命令的15个示例 - 创建文件和目录的副本的相关文章

Linux cp命令参数简介_Linux

cp (复制档案或目录) [root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination) [root@linux ~]# cp [options] source1 source2 source3 -. directory 参数: -a :相当于 -pdr 的意思: -d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身: -f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制

Linux cp命令详解 Linux cp命令怎么用

Linux cp命令主要用于复制文件或目录. 语法 cp [options] source dest 或 cp [options] source... directory 参数说明: -a:此选项通常在复制目录时使用,它保留链接.文件属性,并复制目录下的所有内容.其作用等于dpR参数组合. -d:复制时保留链接.这里所说的链接相当于Windows系统中的快捷方式. -f:覆盖已经存在的目标文件而不给出提示. -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y&quo

Linux cp命令直接覆盖不提示方法

在有时拷贝文件比较多的目录,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在cp覆盖操作的时候是不能忍受的. 把a目录下的文件复制到b目录  代码如下 复制代码 cp  –r  a/*  b 执行上面的命令时,b存在的每个文件都会提示是否覆盖;  代码如下 复制代码 cp –r –f a/*  b 执行上面的命令时,b存在的每个文件都不再会提示; 这是我们希望的理想状态,但是有时加了-f了,怎么还会有提示呢?原来一些服务器会默认增加别名 alias cp='cp -i',当你执行cp时

centos系统修改创建文件夹目录的显示颜色_Linux

前言 linux系统默认目录颜色是蓝色的,在黑背景下看不清楚,可以通过以下2种方法修改ls查看的颜色. 方法: 1.拷贝/etc/DIR_COLORS文件为当前主目录的 .dir_colors cp /etc/DIR_COLORS ~/.dir_colors 2.修改~/.dir_colors中DIR对应的颜色 vim ~/.dir_colors 找到下面这一行: DIR 01;34(01:粗体,34:蓝色) 改为: DIR 01;33(01:粗体,33:黄色) 解释: 效果的具体代码如下 1)

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.5.3 创建文件和目录

2.5.3 创建文件和目录 创建新目录可以调用 其中,路径中除最后一个部件外,其他部分都必须是已存在的.要创建路径中的中间目录,应该使用 可以使用下面的语句创建一个空文件: 如果文件已经存在了,那么这个调用就会抛出异常.检查文件是否存在和创建文件是原子性的,如果文件不存在,该文件就会被创建,并且其他程序在此过程中是无法执行文件创建操作的. 有些便捷方法可以用来在给定位置或者系统指定位置创建临时文件或临时目录: 其中,dir是一个Path对象,pref?ix和suff?ix是可以为null的字符串

浅析java创建文件和目录_java

一,创建文件和目录的关键技术点如下:    1.File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败       2.File类的mkdir方法根据抽象路径创建目录       3.File类的mkdirs方法根据抽象路径创建目录,包括创建不存在的父目录       4.File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀.后缀及文件所在的目录,如果不指定              目录,则存放在系统的临时文

linux cp 命令

  功能 复制文件或目录 语法 cp [选项] 源文件 目的 cp [选项] 源目录 目的 选项 -b,--backup 覆盖已存在的文件时先备份-f,--force 强行复制文件或目录,不管目标文件或目录是否已经存在-i,--interactive 覆盖已存在的文件之前先询问-p,--preserve 保留源文件或目录的属性-r,-R,--recursive 递归处理目录以及目录下所有的项目-u,--update 当源文件比目的文件较新或目的文件不存在时才复制-v,--verbose 显示命令

Linux中用命令复制、移动和删除文件

现在,我在我的 /root 目录中新建了两个文件夹,一个是 /root/aaa 另一个是 /root/bbb.在 /root/aaa 中有 5 个文本文件.分别是 1.txt.2.txt.3.txt.4.txt.5.txt.1.txt 文件内容是"这是 1.txt 文件.",2.txt 文件内容是"这是 2.txt 文件.",其它的以此类推. 而 /root/bbb 文件夹是空的.我们现在要学习在终端中使用命令对 /root/aaa 中的文件进行移动.复制.删除操作

linux 通过命令行执行脚本生成的文件所有者为root的解决办法

通过命令行执行脚本,生成和输出的文件所有者都是root,这就为webserver的二次处理增加了障碍. (1)通过 su www可以解决这一问题 然而通情况下为了安全www用户的shell指定的/sbin/nologin,这就意味这无法通过su来切换. (2)通过修改profile文件的umask来指定权限,等价于chmod 这一方法不仅麻烦,还不安全 (3)通过CURL激活 这也是一个办法,需要在代码中加入:  代码如下 复制代码 <?php ignore_user_abort(true);