如何在 Linux 中正确使用 cp 命令

言鼎科技 2023-07-10 216

-v,该选项为每个处理的文件提供诊断。


让我们使用以下命令下载 file-1.txt 文件:


$cp -v 文件1.txt 文件3.txt


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


3. 如何将多个文件复制到数据库


到目前为止,我们只使用了单个文件和当前项目目录。但在实际的生产环境中,我们必须处理大量的文件。在这种情况下,一种常见的用例是将多个文件复制到单个文件夹。


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


因此,首先创建一个名为 dir-1 的新目录:


$mkdir dir-1

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


$cp -v 文件-1.txt 文件-2.txt 文件-3.txt dir-1


上面的输出显示所有文件都已复制到 dir-1 目录中。另外,需要注意的是,要使用此附加语法,该库必须已经存在并且必须是命令的最后一个参数。


4. 如何避免覆盖文件

默认情况下,cp 命令会更新目标文件,这意味着如果目标中存在同名文件,它将覆盖该文件。但是,我们可以-n使用该选项覆盖此默认行为。


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


$cp -n -v 文件1.txt 文件2.txt

在本例中,我们使用-v选项来指示 file-2.txt 文件不被覆盖。


5. 如何覆盖文件

在前面的示例中,我们了解了如何避免覆盖目标文件。但有时我们希望以更安全的方式编写文件延续。


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



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


$ cp -i 文件1.txt 文件2.txt


cp:覆盖“file-2.txt”?

正如我们所看到的,订单正在等待确认。与其他 Linux 命令一样,我们可以使用y继续或n中止。


cp 命令的这种默认非合作行为是相对不安全的。用户可能会错误地覆盖基本设置。因此,某些 Linux 发行版默认使用 alias 命令强制执行通信行为:


$alias cp='cp-i'

6. 仅当源是最新时才覆盖文件

在前面的示例中,我们了解了如何使用交互模式。然而,有时用户可能会无意中覆盖新文件。


为了避免此类错误情况,我们可以使用-uselect,它仅在源比目标新或文件不在目标中时才尝试复制操作。


首先,编辑源文件的时间戳:


$ touch -t 10101010 文件-1.txt

$ ls - l 文件 - 1 .txt

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


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


$ touch 文件 - 2 . txt

现在,让我们尝试使用选择创建一个复制函数-u:


$ cp -u -v 文件1.txt 文件2.txt

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


最后,让我们交换源参数和目标参数并运行副本:


$ cp -u -v 文件2.txt 文件1.txt

从上面的结果中,我们可以观察到复制操作成功,因为源文件比目标文件新。



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

我们可以指示 cp 命令在覆盖目标文件之前对其进行备份。为此,我们可以使用--backup创建自动备份的选项。


$ cp --backup=编号 -v 文件-1.txt 文件-2.txt

在此示例中,我们使用了备份编号系统。此过程在存储的文件名中使用递增的数字。


为了理解这一点,让我们多次运行一个命令并查看输出:


$ cp --backup=编号 -v 文件-1.txt 文件-2.txt

$ cp --backup=编号 -v 文件-1.txt 文件-2.txt

$ cp --backup=编号 -v 文件-1.txt 文件-2.txt


8. 如何单击复制覆盖文件

在前面的几个示例中,我们了解了如何以更安全的方式覆盖文件。但是,在极少数情况下,需要覆盖该文件。然而,并不能保证该过程总是成功。


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


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


$ chmod 444

$ ls -l 文件 - 2 .txt

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


$cp 文件-1.txt 文件-2.txt

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


为了克服这个限制,我们可以使用-fselect,如果目标文件无法打开,它会删除目标文件并尝试复制操作。


现在,让我们使用-f选项来硬覆盖文件:


$ cp -f -v 文件1.txt 文件2.txt


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

在前面的示例中,我们了解了如果执行期间发生错误如何删除目标文件。然而,有时需要先提取目标文件,然后再执行复制操作。


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


$cp --remove-destination -v 文件-1.txt 文件-2.txt


从上面的输出中我们可以看到cp命令首先提取目标文件,然后执行复制操作。


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

我们可以创建硬链接而不是更新源文件。当磁盘空间有限时,此选项起着重要作用。


因此,让我们使用-l选择来建立牢固的联系:


$cp -l -v 文件1.txt 文件4.txt

现在,让我们看一下两个文件的索引节点号,以验证紧密连接:


$ls -i1 文件1.txt 文件4.txt


在上面的输出中,第一列中的数字表示索引节点号。


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

同样,我们可以使用选项创建软链接而不是创建新代码,-s如下所示:


$cp -s -v 文件-1.txt 文件-5.txt

现在,让我们看看符号连接是否正确完成:


$ls -l 文件-5.txt


在上面的结果中,最后一列表示模型链接关系。


12. 如何在复制过程中保护文件属性

与文件关联的属性有多种,例如访问时间、修改时间、权限等。默认情况下,复制文件时不会保留这些属性。要覆盖此默认行为,我们可以使用-p选项。


要理解这一点,首先编辑 file-1.txt 的时间戳:


$ touch -t 10101010 文件-1.txt

现在,让我们通过保留其所有属性来复制该文件:


$ cp -p -v 文件1.txt 文件6.txt

最后,检查 file-6.txt 文件的时间戳:


$ls -l 文件-6.txt


13. 如何递归复制函数

到目前为止我们已经了解了如何复制单个文件。然而,我们通常必须复制特定目录中的所有文件和子目录。


-r在这种情况下,我们可以通过使用or选项来使用递归模式-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 系统时可以看到这些例子。


你也许也喜欢:


进度 – 显示(cp、mv、dd、tar)命令的复制数据百分比

使用“pv”命令监控(复制/查看/移动)数据进度

在使用中

高级复制命令 - 在 Linux 中复制大文件/文件夹时显示高级代码

您还知道 Linux 中 cp 命令的其他最佳示例吗?请在下面的评论中告诉我们您的看法。

言鼎科技

The End