cp 和 mv 都围绕来源(source)与目标(destination)工作。理解最后一个参数究竟是新文件名还是已有目录,比死记命令形式更重要。
cp:复制后保留原件
cp notes.txt notes-backup.txt 创建独立副本,之后修改其中一个不会自动影响另一个。若目标是已有目录,cp notes.txt backup/ 会保留文件名并把副本放进去。多个来源可写成 cp notes.txt todo.txt backup/,此时最后一个参数必须是目录。
cp source destination 来源保留,目标得到副本。
mv source destination 来源离开原位置;目标可能是目录或新名称。
cp -r project project-backup 递归复制目录及其中的全部内容。
cp -i source destination 目标已存在时,在覆盖前询问。
复制目录与覆盖风险
普通 cp 通常拒绝直接复制目录;使用 cp -r project project-backup 才会递归复制整棵目录。复制到已有文件名通常会覆盖内容,cp -i 可在覆盖前进行交互确认。
mv:移动也是重命名
mv notes.txt archive/ 把文件移入已有目录,原位置不再保留它;mv draft.txt report.txt 则把文件移动到同目录的新名称,也就是重命名。目录同样可以用 mv old-project new-project 改名。
判断方法: 目标是已有目录时,项目通常被放进去;目标是一个新名称时,操作通常表现为复制并改名,或直接重命名。
互动实验
观察来源与目标
访问权限免费
模拟终端已启动。输入命令,观察输出和右侧文件系统。
$
模拟文件系统/home/alice
/homealicearchivebackupcachedataindex.bin
DocumentsDownloadsemptyPicturesprojectsrcREADME.md
.bashrc.profileaccess.logapp.logdraft.txterror.lognotes.txt
varlogsyslog
快捷按钮只负责填入命令;点击运行或按 Enter 后,终端和文件系统才会变化。知识测验
题目
哪条命令能把 project 目录及其内容复制成 project-backup?
知识测验
题目
当前目录没有 final.txt。执行 mv draft.txt final.txt 后哪项正确?
动手练习
整理发布候选文件
当前目录包含 app/、README.md、draft.txt,并已有 backup/ 与 archive/。写出命令完成下面任务。
- 递归备份整个 app/ 为 backup/app-v1/。
- 把 README 复制到 backup,并在覆盖前确认。
- 把 draft.txt 改名为 release-notes.txt,再移入 archive。