Linux cp 命令:文件复制

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将探索 Linux 中强大的 cp 命令,这是文件与目录管理的重要工具。你将学习如何高效地复制文件和目录,了解各种选项以自定义复制过程,并在实际场景中应用这些技能。通过本实验,你将能够熟练使用 cp 命令进行日常文件管理和备份任务。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("`Linux`")) -.-> linux/BasicSystemCommandsGroup(["`Basic System Commands`"]) linux(("`Linux`")) -.-> linux/BasicFileOperationsGroup(["`Basic File Operations`"]) linux(("`Linux`")) -.-> linux/FileandDirectoryManagementGroup(["`File and Directory Management`"]) linux/BasicSystemCommandsGroup -.-> linux/tree("`Directory Tree Display`") linux/BasicFileOperationsGroup -.-> linux/ls("`Content Listing`") linux/BasicFileOperationsGroup -.-> linux/cp("`File Copying`") linux/BasicFileOperationsGroup -.-> linux/cat("`File Concatenating`") linux/FileandDirectoryManagementGroup -.-> linux/cd("`Directory Changing`") linux/FileandDirectoryManagementGroup -.-> linux/pwd("`Directory Displaying`") linux/FileandDirectoryManagementGroup -.-> linux/wildcard("`Wildcard Character`") subgraph Lab Skills linux/tree -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/ls -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/cp -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/cat -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/cd -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/pwd -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} linux/wildcard -.-> lab-209744{{"`Linux cp 命令:文件复制`"}} end

理解基本的 cp 命令

cp 命令是 Linux 中复制文件的基础工具。让我们从一个简单的场景开始:你需要为一份重要文档创建备份。

在你的项目目录 (~/project) 中,有一个名为 important_report.txt 的文件。你的任务是在同一目录下创建该文件的备份。

首先,检查项目目录的内容:

ls ~/project

你应该会看到 important_report.txt 列在其他文件中。如果看到其他文件,不用担心;我们现在只关注 important_report.txt

接下来,创建备份:

cp ~/project/important_report.txt ~/project/important_report_backup.txt

这条命令会在同一目录下创建一个名为 important_report_backup.txtimportant_report.txt 副本。以下是命令的每个部分的含义:

  • cp:这是用于复制文件的命令。
  • ~/project/important_report.txt:这是我们要复制的源文件。~ 符号代表你的主目录(home directory)。
  • ~/project/important_report_backup.txt:这是目标文件。我们创建了一个在文件名后添加了“_backup”的新文件。

为了验证复制是否成功,再次列出目录内容:

ls ~/project

现在你应该会看到 important_report.txtimportant_report_backup.txt 两个文件。如果没有看到新文件,请仔细检查是否正确地输入了 cp 命令。

将文件复制到不同目录

通常,你需要将文件复制到不同的位置。让我们模拟一个场景:你在整理音乐收藏。

首先,检查音乐目录是否存在:

ls ~/project

你应该会看到一个名为 music 的目录。如果它不存在,不用担心;它已经在设置脚本中被创建。

接下来,将音乐文件从项目目录复制到音乐目录:

cp ~/project/favorite_song.mp3 ~/project/music/

这条命令将 favorite_song.mp3 从项目目录复制到 music 目录。让我们分解一下这条命令:

  • cp:复制命令。
  • ~/project/favorite_song.mp3:我们要复制的源文件。
  • ~/project/music/:目标目录。注意末尾的斜杠 (/) —— 这告诉 cp 命令 music 是一个目录。

为了验证文件是否成功复制,列出音乐目录的内容:

ls ~/project/music

你应该会看到 favorite_song.mp3 列在其中。如果没有看到,请确保你正确地输入了 cp 命令,并且 favorite_song.mp3 存在于你的项目目录中。

一次性复制多个文件

你可以通过一条命令复制多个文件,这对于批量操作非常有用。让我们来整理你的文档收藏。

首先,检查文档目录是否存在:

ls ~/project

你应该会看到一个名为 documents 的目录。

接下来,将多个文本文件复制到该文档目录中:

cp ~/project/report1.txt ~/project/report2.txt ~/project/notes.txt ~/project/documents/

这条命令将 report1.txtreport2.txtnotes.txt 复制到 documents 目录中。以下是它的工作原理:

  • cp:复制命令。
  • ~/project/report1.txt ~/project/report2.txt ~/project/notes.txt:这些是我们要复制的源文件。你可以根据需要列出任意数量的文件,用空格分隔。
  • ~/project/documents/:这是目标目录。

验证文件是否已复制:

ls ~/project/documents

你应该会看到所有三个文件(report1.txtreport2.txtnotes.txt)列在其中。如果有文件缺失,请仔细检查 cp 命令是否有拼写错误。

使用 -i 选项进行交互式复制

在复制文件时,你可能会遇到目标位置已存在同名文件的情况。-i 选项使 cp 命令变为交互式,在覆盖现有文件之前会提示你。

让我们模拟这个场景:

首先,查看现有文件的内容:

cat ~/project/test_file.txt

提示:如果你不熟悉 cat 命令,不用担心;稍后会详细解释。

你应该会看到显示“Original content”。

现在,尝试复制一个同名文件:

cp -i ~/project/new_test_file.txt ~/project/test_file.txt

当提示时,输入 y 并按 Enter 键以覆盖文件。如果不想覆盖,输入 n 并按 Enter 键。

-i 选项代表“interactive”(交互式)。它告诉 cp 在覆盖任何现有文件之前请求确认。这是一种防止意外数据丢失的安全措施。

现在,检查文件的内容:

cat ~/project/test_file.txt

如果你选择覆盖,你应该会看到“New content”显示。如果没有,你仍然会看到“Original content”。

使用 -r 选项进行递归复制

-r 选项允许你递归地复制目录及其内容。这对于备份整个目录结构特别有用。

让我们为整个网站目录创建一个备份:

cp -r ~/project/website ~/project/website_backup

这条命令将 website 目录及其所有内容复制到一个名为 website_backup 的新目录中。以下是每个部分的含义:

  • cp:复制命令。
  • -r:此选项代表“recursive”(递归)。它告诉 cp 复制目录及其内容。
  • ~/project/website:这是我们要复制的源目录。
  • ~/project/website_backup:这是我们将所有内容复制到的新目录。

验证备份是否成功创建:

ls -R ~/project/website_backup

你应该会看到整个目录结构和文件列表。ls-R 选项会递归地显示目录内容。

如果没有看到预期的结构,请确保你正确地输入了 cp -r 命令。

使用 -p 选项保留文件属性

在复制文件时,你可能希望保留原始文件的属性,例如时间戳和权限。-p 选项可以帮你实现这一点。

让我们来演示一下:

首先,查看原始文件的属性:

ls -l ~/project/old_file.txt

注意显示的日期和时间。

现在,复制文件并保留其属性:

cp -p ~/project/old_file.txt ~/project/preserved_file.txt

-p 选项代表“preserve”(保留)。它会保留原始文件的修改时间、访问时间和权限。

让我们比较两个文件的属性:

ls -l ~/project/old_file.txt ~/project/preserved_file.txt

你应该会看到两个文件的日期和时间相同。如果它们不同,请确保你在 cp 命令中使用了 -p 选项。

使用通配符进行选择性复制

通配符允许你根据模式复制多个文件。这在你想复制特定类型或具有特定命名规则的文件时非常有用。

让我们将所有文本文件复制到 text_files 目录中:

cp ~/project/*.txt ~/project/text_files/

并将所有 PDF 文件复制到 pdf_files 目录中:

cp ~/project/*.pdf ~/project/pdf_files/

以下是通配符 (*) 的含义:

  • *.txt 匹配任何以 ".txt" 结尾的文件
  • *.pdf 匹配任何以 ".pdf" 结尾的文件

这使你可以复制多个文件,而无需逐个列出它们。

验证文件是否正确复制:

ls ~/project/text_files
ls ~/project/pdf_files

你应该会在 text_files 目录中看到所有 .txt 文件,在 pdf_files 目录中看到所有 .pdf 文件。

总结

在本实验中,你已经掌握了 Linux cp 命令的基本用法。你学会了如何:

  1. 复制单个文件
  2. 将文件复制到不同目录
  3. 一次性复制多个文件
  4. 使用 -i 选项进行交互式复制
  5. 使用 -r 选项递归复制目录
  6. 使用 -p 选项保留文件属性
  7. 使用通配符进行选择性复制

本实验未涵盖的其他 cp 选项包括:

  • -u:仅在源文件比目标文件新或目标文件缺失时复制
  • -v:详细模式,解释正在执行的操作
  • -n:不覆盖;不覆盖现有文件
  • -l:创建硬链接而不是复制文件
  • -s:创建符号链接而不是复制文件

cp 命令是 Linux 中文件管理的强大工具。掌握了这些技能后,你现在能够高效且有效地处理各种文件复制任务。

资源

您可能感兴趣的其他 Linux 教程