Linux复制文件
1. cp -r(本地复制)
cp:是 copy 的缩写,用于复制文件或目录。-r(或-R):是 recursive(递归)的缩写。这个选项告诉cp命令,如果源路径是一个目录,就递归地复制该目录及其内部的所有子目录和文件。如果复制目录时不加-r选项,命令会报错。示例场景:
bash
# 1. 将一个目录及其所有内容复制到另一个位置(本地备份) cp -r /home/user/documents /media/backup_drive/ # 2. 在当前目录下复制一个项目文件夹,用于新实验 cp -r old_project/ new_project/ # 操作后,本地文件结构变化: # 原位置: /home/user/documents (仍在) # 新位置: /media/backup_drive/documents (新增)
2. scp(安全远程复制)
scp:是 secure copy 的缩写。它利用 SSH 协议进行加密传输,因此非常安全。它的语法结合了cp和ssh的特点。语法关键: 指定远程机器的方法是通过
用户名@远程主机IP或域名:路径的形式。示例场景:
bash
# 1. 从本地复制到远程服务器 (Upload) # 语法: scp -r [本地路径] [用户名]@[服务器地址]:[远程路径] scp -r /home/user/my_app/ user@192.168.1.100:/var/www/html/ # 这会要求你输入 user 在 192.168.1.100 这台服务器上的密码 # 2. 从远程服务器复制到本地 (Download) # 语法: scp -r [用户名]@[服务器地址]:[远程路径] [本地路径] scp -r user@example.com:/opt/backups/database/ /home/user/local_backups/ # 3. 在两台远程服务器之间复制 scp -r user1@server1.com:/path/to/data/ user2@server2.com:/path/to/target/常用选项:
-P <端口号>:如果远程SSH服务不在默认的22端口,需要用此指定端口(注意是大写的P)。bash
scp -P 2222 -r local_dir/ user@example.com:~/remote_dir/-i <身份文件>:使用指定的私钥文件进行连接,而非密码。bash
scp -i ~/.ssh/my_key.pem -r local_dir/ user@example.com:~/remote_dir/
⚠️ 重要注意事项
scp也需要-r来复制目录:和cp一样,如果你要复制的是一个目录,必须加上-r参数,否则scp会报错并拒绝操作。路径中的特殊字符:如果文件名或路径中包含空格等特殊字符,务必用引号将其括起来。
bash
# 正确 scp -r "local dir with spaces/" user@example.com:"remote dir with spaces/" # 错误(会中断) scp -r local dir with spaces/ user@example.com:remote dir with spaces/scp的替代品:对于需要频繁传输大量文件或增量同步的场景,rsync命令是比scp更优秀的选择,因为它可以智能地只传输变化的文件,节省带宽和时间。其基本用法与scp类似。bash
rsync -avz -e ssh /local/path/ user@remote:/path/
💎 总结:如何选择?
| 你的需求 | 应使用的命令 |
|---|---|
| 在本机硬盘上备份一个文件夹 | cp -r |
| 将网站文件上传到VPS服务器 | scp -r |
| 从生产服务器下载日志文件进行分析 | scp |
| 在两台远程服务器之间迁移数据 | scp -r(或更好的 rsync) |
一句话总结:
- 操作本地文件,用
cp -r。 - 操作远程服务器上的文件,用
scp -r。
希望这个清晰的对比能帮助你更好地理解和使用这两个命令!
