Linux 中的 cp 命令:7 个实用示例

在 Linux 中您必须知道的命令之一是 cp。 它在 Linux 中通常被称为复制命令,它实际上是复制的缩写,它的功能正如其名称所暗示的那样:复制。

cp 用于将文件从一个位置复制到另一个位置。 cp 也可用于将整个目录复制到新位置。 您也可以使用它来复制多个文件和目录。

7 在 Linux 中使用 cp 命令的例子

让我们看看如何将 cp 命令用于各种目的:

1.如何复制文件

最简单的 example 将是复制一个文件。 为此,您只需指定源文件和目标目录或文件。

cp source_file target_directory/target_file

在上述 example,如果target_fille在target_directory中不存在,它将创建target_file。

但是,如果 new_file 已经存在,它会在不询问的情况下覆盖它。 这意味着现有目标文件的内容将随着源文件的内容而改变。

我将在本教程后面向您展示如何处理文件覆盖。

记住: 默认情况下,如果目标文件已经存在,cp 命令会覆盖。 可以使用 -n 或 -i 选项更改此行为,稍后解释。

2.如何复制多个文件

如果您想一次将多个文件复制到新位置,可以通过以下方式进行:

cp file1 file2 file3 fileN target_directory

这会将所有指定的文件复制到目标目录。 如果目标目录有与源文件名匹配的文件,它将被覆盖。

3.复制文件时处理覆盖的多种方式

您可能并不总是希望现有的目标文件被覆盖,这是完全合乎逻辑的。

为防止覆盖现有文件,您可以使用 -n 选项。 这样,cp 将不会覆盖现有文件。

cp -n source_file target_directory

但也许你想覆盖一些文件。 您可以使用交互式选项 -i,它会询问您是否要覆盖现有文件。

cp -i source_file target_directory
cp: overwrite 'target_directory/source_file'?

您可以输入 y 覆盖现有文件或输入 n 不覆盖它。

还有一个用于进行自动备份的选项。 如果您在 cp 命令中使用 -b 选项,它将覆盖现有文件,但在此之前,它将创建覆盖文件的备份。

cp -b file.txt target_dir/file.txt
ls target_dir
file.txt file.txt~

文件的备份以 ~ 结尾。

您还可以使用更新选项 -u 在处理覆盖时。 使用 -u 选项,仅当源文件比现有文件新或目标目录中不存在源文件时,才会将源文件复制到新位置。

总结一下:

  • -i : 覆盖前确认
  • -n :不覆盖
  • -b :用备份覆盖
  • -u :如果目标文件旧或不存在则覆盖

4.如何在Linux中复制目录

您还可以使用 cp 命令复制 Linux 中的目录,包括其所有文件和子目录。 您必须在此处使用代表递归的 -r 选项。

cp -r source_dir target_dir

这会将整个 source_dir 复制到 target_dir。 现在 source_dir 将成为 target_dir 的子目录。

ls target_dir
source_dir

5. 如何只复制目录的内容,而不是目录本身

在上一个 example,您将整个目录复制到新位置。

但是如果你只是想将源目录的内容复制到目标目录中,你应该添加/。 在源目录的末尾。 这将表明您只想复制源目录的内容。

让我们看看它 example:

ls source_dir
source_file_1 source_file2

现在复制源目录的内容:

cp -r source_dir/. target_dir

如果您现在检查目标目录的内容,您会看到只复制了源目录的内容。

ls target_dir
source_file_1 source_file2

6.如何复制多个目录

您还可以在 Linux 中使用 cp 命令一次复制多个目录。

只需像对单个目录一样使用它。

cp -r source_dir1 source_dir2 source_dir3 target_dir

它始终是作为目标目录的命令中的最后一个参数。

如果您只想一次复制多个目录的内容,您也可以这样做:

cp -r source_dir1/. source_dir2/. source_dir3/. target_dir

事实上,您可以完全混合目录、它们的内容和文件。

cp -r source_dir1 source_dir2/. source_file target_dir

提示:您可以使用带有选项 -v 的详细模式来查看正在复制的文件。

7. 复制时如何保留属性

当您将文件复制到新位置时,文件权限和文件时间戳等属性会更改。

如果要保留原始文件的属性,可以使用选项 -p 复制文件。

让我们看看它 example.

ls -l /etc/services 

-rw-r--r-- 1 root root 19183 Dec 26  2016 /etc/services

如果我尝试正常复制此文件,它的属性将被更改:

cp /etc/services .
ls -l services 
-rwxrwxrwx 1 abhishek abhishek 19183 Nov 25 20:45 service

但如果我使用选项 p,复制的文件将保留模式、所有权和时间戳。

cp -p /etc/services .
ls -l services 
-rw-r--r-- 1 abhishek abhishek 19183 Dec 26 2016 services

如您所见,您使用 -p 选项保留了源文件的访问模式和时间戳。

可是等等! 难道不应该保留源文件的所有权吗? 但是这里源文件的所有者(根)已更改为 abhishek。

这是因为只有 root 才有权更改 root 拥有的文件的所有权。 如果对不属于 root 的文件使用 -p 选项,它将保留所有权。 或者,您可以使用以下命令运行命令 sudo 保留root拥有的文件的所有权。

您还可以指定要保留的属性。 但是你必须使用–preserve 选项。

cp --preserve=timestamp /etc/services .
ls -l services 
-rw-r--r-- 1 abhishek abhishek 19183 Dec 26  2016 services

正如您在上面的输出中看到的,它只保留了源文件的时间戳。

您可以进一步探索 cp 命令通过浏览其手册页. 此处显示的示例是您将作为 Linux 用户、系统管理员或软件开发人员使用的最常见示例。

如果您喜欢本教程,请在社交媒体和各种论坛上分享这篇文章。