cp 命令复制文件和目录,同时把源文件留在原处。其基本语法是:
cp [OPTIONS] SOURCE DESTINATION
命令行 · 第 10 课
学习复制文件和目录树,并控制覆盖行为与保留的属性。
cp 命令复制文件和目录,同时把源文件留在原处。其基本语法是:
cp [OPTIONS] SOURCE DESTINATION
你可以将一个文件复制到另一个文件,将一个或多个文件复制到目录,或者使用正确的选项复制整个目录树。
要复制文件,你需要指定源文件和目标目录或路径。
$ cp mycoolfile /home/pete/Documents/cooldocs
如果 /home/pete/Documents/cooldocs 是现有目录,副本会以 mycoolfile 为名创建在其中。也可以提供新的目标文件名:
$ cp mycoolfile /home/pete/Documents/mycoolfile_backup
在第二个示例中,复制的数据会获得 mycoolfile_backup 这个名称。
哪个命令会把 draft.txt 复制为名为 final.txt 的文件,同时保留 draft.txt?
要将多个文件复制到同一目录,先列出所有源文件,最后写目标目录。
$ cp report.txt notes.txt summary.txt /home/pete/Documents/
当你提供多个源文件时,最后一个参数必须是目录。
哪个命令会把 a.txt 和 b.txt 复制到现有的 archive/ 目录?
通配符是特殊字符,帮助你基于模式选择多个文件,提供极大的灵活性。
*:匹配任意字符序列。?:匹配任意单个字符。[]:匹配括号内的任意一个字符。例如,要将当前目录下所有 JPEG 图片复制到 Pictures 目录:
$ cp *.jpg /home/pete/Pictures
批量复制前应预览匹配项,尤其是目标中含有重要数据时:
$ ls *.jpg
beach.jpg lunch.jpg profile.jpg
$ cp *.jpg /home/pete/Pictures
复制 *.jpg 前,哪个命令会显示该模式当前匹配到的非隐藏名称?
如果你尝试使用 cp 复制目录而不加任何选项,会收到错误。要复制目录及其所有内容(包括子目录),必须使用 -r(递归)标志。
$ cp -r Pumpkin/ /home/pete/Documents
此命令将 Pumpkin 目录及其所有内容复制到你的 Documents 目录。
你也可能看到 -R,在典型 Linux 系统中它具有相同的递归作用:
$ cp -R website /home/pete/backups/
归档模式 -a 适合备份式复制。它会递归复制,同时保留链接和许多文件属性:
$ cp -a project/ project-backup/
你想对 project/ 进行递归的备份式复制,并保留链接和许多属性。哪个命令符合要求?
默认情况下,如果目标位置有同名文件,cp 会覆盖它。为了防止意外数据丢失,可以使用 -i(交互式)标志,覆盖前会提示确认。
$ cp -i mycoolfile /home/pete/Pictures
cp: overwrite '/home/pete/Pictures/mycoolfile'? n
如果现有目标不应被覆盖,请使用 -n:
$ cp -n mycoolfile /home/pete/Pictures
-f 会让 GNU cp 在无法打开现有目标进行写入时尝试先删除它,再重试复制。它不能替代对目标的谨慎检查。shell 别名也可能自动添加 -i 等选项,因此遇到意外提示时应检查配置,不要想当然。
哪个命令会把 report.txt 复制到 backup/,但在同名目标已存在时跳过它?
复制文件时,其元数据(如修改时间和所有权)通常会被更新。要保留这些原始属性,请使用 -p 选项。
$ cp -p mycoolfile /home/pete/backups/
-u 选项仅在源文件比目标文件新,或者目标文件不存在时才复制。
$ cp -u *.txt /home/pete/Documents/
其他常用选项包括:
-f:强制覆盖,必要时先删除目标文件。-v:显示复制的每个文件。要练习复制文件和目录树,可以尝试以下动手实验:
cp、mv 和 rm 命令,练习 Linux 文件管理技能,组织项目结构,移动文件,清理不必要的目录。课程已完成
现在,你可以复制文件和目录树,并控制如何处理目标。
把源操作数放在目标之前。
批量复制前预览通配符匹配项。
递归复制目录树或使用归档模式。
确认、跳过或有意识地替换现有目标。
按需保留属性或只复制较新的源文件。