如何在Linux [14 CP命令示例]中复制文件和目录

简介:在此易于遵循的指南中,我们将讨论CP命令的一些实用示例。遵循本指南后,用户将能够使用命令行界面轻松地在Linux中复制文件和目录。

作为Linux用户,我们与时。用户执行的一个常见操作是。当然,我们可以使用图形文件管理器执行复制操作。但是,大多数Linux用户都喜欢使用CP命令由于其简单性和丰富的功能。

在此初学者指南中,我们将了解CP命令。顾名思义,CP命令用于在给定路径上复制文件和目录。

在整个指南中,我们将了解CP命令使用可以日常使用的实践示例。

因此,让我们开始。

CP命令语法

语法CP命令与其他Linux命令相同。在高水平上,它分为两个部分 - 选项和争论:

$ cp [OPTIONS] <SOURCE> <DEST>
$ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

在上面的语法中,方括号([])表示可选的论点,而角括号(<>)代表强制性论点。

1。如何在Linux中复制文件

基本用途之一CP命令是将文件复制到当前目录中。大多数时候,用户执行此操作以备份重要配置。

例如,我们经常创建一个备份副本在更新SSH配置之前。

要了解用法,让我们创建一个简单的文件:

$ touch file-1.txt

接下来,使用以下命令创建文件副本:

$ cp file-1.txt file-2.txt
在Linux中复制文件

2。显示复制命令进度

在上一个示例中,我们使用了验证文件复制操作是否成功。但是,仅使用一个命令来验证先前命令的结果是没有意义的。

在这种情况下,我们可以使用-v选项,为每个处理的文件提供诊断。

让我们复制file-1.txt使用以下命令进行文件:

$ cp -v file-1.txt file-3.txt
显示复制输出

在上面的输出中,箭头表示要复制的文件。左侧参数是源文件,而右侧参数是目标文件。

3。如何将多个文件复制到目录

到目前为止,我们仅使用一个文件和当前的工作目录。但是,在真正的生产环境中,我们必须与。在这种环境中,常见用例之一是将多个文件复制到一个单一目录中。

显然,我们可以多次执行CP命令来实现它,但这不是最有效的方法。为了有效执行此类操作,我们可以使用CP命令的替代语法。

所以,首先,用名字dir-1:

$ mkdir dir-1

现在,让我们将所有三个文件复制到dir-1使用单个命令的目录:

$ cp -v file-1.txt file-2.txt file-3.txt dir-1
在Linux中复制多个文件

以上输出表明所有文件已复制到dir-1目录。同样,重要的是要注意,要使用此替代语法,目录必须已经存在,并且必须是命令的最后一个参数。

4.如何避免覆盖文件

默认情况下,CP命令替换了目标文件,这意味着如果文件在目的地以相同的名称存在,则将覆盖该文件。但是,我们可以使用-n选项。

要理解这一点,让我们尝试覆盖现有文件:

$ cp -n -v file-1.txt file-2.txt

在此示例中,我们使用了-v选项以说明file-2.txt文件尚未被覆盖。

5。如何用确认文件覆盖文件

在上一个示例中,我们看到了如何避免目标文件的覆盖。但是,有时我们想以更安全的方式覆盖文件目的地。

在这种情况下,我们可以使用-i命令的选项使复制操作交互式。此选项显示警告消息,并在覆盖文件之前等待用户的确认。

为了说明这一点,让我们尝试覆盖现有文件:

$ cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

如我们所见,命令正在等待确认。就像其他Linux命令一样,我们可以使用'y'继续或'n'中止操作。

这种默认的非交互行为CP命令不是很安全。用户可能会错误地覆盖重要的配置。因此,某些Linux分布默认使用:

$ alias cp='cp -i'

6。仅当源较新时覆盖文件

在上一个示例中,我们看到了如何使用交互模式。但是,有时,用户可能会无意中覆盖较新的文件。

为了避免此类错误的情况,我们可以使用-u选项,仅在源比目的地更新或目的地不存在文件时,才尝试复制操作。

首先,更新源文件的时间戳:

$ touch -t 10101010 file-1.txt
$ ls -l file-1.txt

在上面的示例中,我们使用了-t选项将文件的时间戳设置为2010年10月10日。

接下来,让我们将目标文件的时间戳更新到当前时间:

$ touch file-2.txt

现在,让我们尝试使用-u选项:

$ cp -u -v file-1.txt file-2.txt

在这里,我们可以看到尚未尝试使用复制操作,因为目标文件比源更新。

最后,让我们交换源和目的地参数并执行复制操作:

$ cp -u -v file-2.txt file-1.txt

在上面的输出中,我们可以观察到复制操作成功,因为源文件比目的地更新。

仅当源较新的情况下覆盖文件

7.如何在覆盖之前备份文件

我们可以指导CP命令在覆盖目标文件之前备份目标文件。为了实现这一目标,我们可以使用--backup选项,执行自动备份。

$ cp --backup=numbered -v file-1.txt file-2.txt

在此示例中,我们使用了编号的备份策略。此策略在备份文件名中使用增量数字。

要理解这一点,让我们多次执行相同的命令并观察输出:

$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt
覆盖之前备份文件

8。如何强制复制到覆盖文件

在前几个示例中,我们看到了如何以更安全的方式覆盖文件。但是,在某些极少数情况下,要求是覆盖文件。但是,不能保证每次操作都会成功。

例如,如果目标文件没有写入权限,则复制操作将失败。让我们用一个示例来说明这一点。

首先,更改目标文件的权限:

$ chmod 444 file-2.txt
$ ls -l file-2.txt

现在,让我们尝试覆盖file-2.txt文件:

$ cp file-1.txt file-2.txt

在上面的输出中,我们可以看到命令因拒绝错误而失败。

为了克服这一限制,我们可以使用-f选项,如果无法打开目标文件,则删除目标文件并尝试复制操作。

现在,让我们使用-f有力覆盖文件的选项:

$ cp -f -v file-1.txt file-2.txt
强制复制到覆盖文件

9.如何在复制之前删除目标文件

在上一个示例中,我们看到了如何在操作时删除目标文件。但是,有时要求首先删除目标文件,然后执行复制操作。

为了满足这样的要求,我们可以使用--remove-destination选项。

$ cp --remove-destination -v file-1.txt file-2.txt
复制之前删除目标文件

在上面的输出中,我们可以看到CP命令首先删除目标文件,然后执行复制操作。

10。如何创建硬链接文件而不是复制

我们可以创建一个硬链接,而不是创建源文件的新副本。当磁盘空间稀缺时,此选项起着重要的作用。

所以,让我们使用-l创建硬链接的选项:

$ cp -l -v file-1.txt file-4.txt

现在,让我们检查两个文件的Inode数字以验证硬链接:

$ ls -i1 file-1.txt file-4.txt
创建硬链接文件而不是复制

在上面的输出中,第一列中的数字表示Inode编号。

11.如何创建软链接文件而不是复制

以类似的方式,我们可以创建一个软链接,而不是使用-s选项如下所示:

$ cp -s -v file-1.txt file-5.txt

现在,让我们验证是否正确创建了符号链接:

$ ls -l file-5.txt
创建一个软链接而不是复制

在上面的输出中,最后一列代表符号链接关系。

12.如何在复制时保留文件属性

该文件有各种属性,例如其访问时间,修改时间,权限等。默认情况下,复制文件时未保留这些属性。为了覆盖这种默认行为,我们可以使用-p选项。

要了解这一点,首先,请更新file-1.txt:

$ touch -t 10101010 file-1.txt

现在,让我们通过保留其所有属性来创建此文件的副本:

$ cp -p -v file-1.txt file-6.txt

最后,验证时间戳file-6.txt文件:

$ ls -l file-6.txt
复制时保留文件属性

13。如何递归执行复制操作

到目前为止,我们看到了如何复制一个文件。但是,通常我们必须复制特定目录的所有文件和子目录。

在这种情况下,我们可以使用递归模式使用-r或者-R选项。

因此,让我们创建一个目录,并在其中添加一些文件和子目录:

$ mkdir -p dir-1/dir-2
$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

接下来,验证目录结构已正确创建:

$ tree dir-1

现在,让我们使用以下命令递归复制DIR-1目录:

$ cp -r -v dir-1 dir-3

最后,验证所有文件和子目录是否已成功复制:

$ tree dir-3
递归复制文件

14.如何复制多个目录

与文件类似,我们可以使用单个命令复制多个目录递归。但是,要实现此目标,目标目录必须已经存在,并且必须是命令中的最后一个参数。让我们以一个例子理解这一点。

首先,创建一个新目录目录:

$ mkdir dir-4

现在,让我们复制dir-1和DIR-3目录中的目录DIR-4使用以下命令的目录:

$ cp -r -v dir-1 dir-3 dir-4

以类似的方式,我们可以使用-t命令的选项以实现相同的结果。此选项允许我们指定目标目录。因此,我们也可以将其用作第一个参数:

$ cp -t dir-4 -r -v dir-1 dir-3
复制多个目录

在本文中,我们讨论了如何使用CP命令。初学者可以在使用Linux系统时参考日常生活中的这些例子。

您知道Linux中CP命令的其他最佳示例吗?在下面的评论中让我们知道您的观点。