Linux 复制整个文件夹指南
在 Linux 中复制整个文件夹(包括子目录和文件)到另一个位置,可以使用 cp 或 rsync 命令。以下是详细方法和注意事项:
使用 cp 命令(基础方法)
基本语法
cp -r /源文件夹路径 /目标路径
-r:递归复制,保留子目录结构-v(可选):显示复制进度(verbose)-p(可选):保留文件属性(权限、时间戳等)
示例
将 /home/user/data 复制到 /backup 下(保留所有子文件和属性)
cp -rpv /home/user/data /backup/
效果:
/backup/ 下会生成一个 data 文件夹,内容与原文件夹完全一致。
使用 rsync 命令(推荐,功能更强大)
基本语法
rsync -av /源文件夹路径/ /目标路径/
-a:归档模式(保留权限、符号链接等,相当于-rlptgoD)-v:显示进度-z(可选):压缩传输(适合远程复制)--delete(可选):同步时删除目标中多余的文件(谨慎使用)
示例
将 /var/www/html 同步到 /mnt/backup(保留所有属性)
rsync -av /var/www/html/ /mnt/backup/
注意:
源路径末尾的 / 表示复制文件夹内容(不包含文件夹本身)。
若省略 /,则会在目标路径下创建同名文件夹(如 rsync -av /var/www/html /mnt/backup 会生成 /mnt/backup/html/)。
高级场景处理
(1) 排除特定文件/目录
排除 node_modules 和 .tmp 文件
rsync -av --exclude='node_modules' --exclude='*.tmp' /source/ /target/
(2) 断点续传(网络传输或大文件)
rsync -av --partial --progress /large_folder/ user@remote:/backup/
--partial:保留部分传输的文件--progress:显示实时进度
(3) 保留硬链接和稀疏文件
rsync -avH --sparse /source/ /target/
-H:保留硬链接--sparse:高效处理稀疏文件(如虚拟机磁盘)
复制后验证
检查文件完整性
对比源和目标文件的 MD5 校验和
find /source/ -type f -exec md5sum {} + | sort > source.md5
find /target/ -type f -exec md5sum {} + | sort > target.md5
diff source.md5 target.md5
若无输出,则表示所有文件一致。
查看复制的文件树
tree -d /target/ # 显示目录结构(需安装 tree 命令)
注意事项
权限问题
- 若目标路径需要管理员权限,在命令前加
sudo - 复制系统文件时建议保留属性(
-a或-p选项)
符号链接处理
cp -r默认复制符号链接本身(而非指向的文件),若需解引用用-Lrsync -a默认保留符号链接,若需解引用用-L
覆盖风险
- 目标路径已存在同名文件时,默认会静默覆盖。可用
-i交互确认:cp -rpi /source/ /target/
跨文件系统复制
- 若目标为 NTFS/FAT,可能丢失权限信息,建议用 rsync 并显式指定权限:
rsync -rtv --modify-window=1 /source/ /mnt/windows_drive/
总结
| 场景 | 推荐命令 |
|---|---|
| 本地简单复制 | cp -rpv /source/ /target/ |
| 保留所有属性+排除文件 | rsync -av --exclude='*.log' /source/ /target/ |
| 远程或大文件同步 | rsync -avz --progress user@remote:/source/ /local/ |
| 需要严格校验 | 复制后运行 diff 或 md5sum 校验 |
根据需求选择合适的方法,日常推荐 rsync -a,兼顾功能与可靠性。
