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
默认复制符号链接本身(而非指向的文件),若需解引用用-L
rsync -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
,兼顾功能与可靠性。