一、基础操作:复制目录的正确姿势
在Debian里复制目录,新手常犯的错误就是直接cp dir1 dir2——这压根不会生效!关键要加递归参数-R或-r。比如想备份/home/user/docs到外接硬盘:

cp -R /home/user/docs /mnt/backup/
这个-R会让cp像掘地鼠一样钻透所有子目录。如果目标路径带斜杠(如/mnt/backup/docs/),系统会把整个源目录塞进docs子文件夹;不加斜杠则会直接覆盖目标路径,用的时候得留心。
二、属性保留:让复制品完美复刻原版
直接复制目录后,你可能会发现文件权限全乱了!用-a参数能一键打包所有属性:
- 权限保留:维持原文件的读写执行权限
- 时间戳同步:创建/修改时间与原文件完全一致
- 符号链接处理:保持软链接结构而非复制目标文件
迁移网站数据时特别实用:cp -a /var/www/old_site /var/www/new_site
这样连.htaccess隐藏文件的权限都不会丢。想单独保留时间戳?用-p;只要权限?用--preserve=mode。
三、安全防护:避免手滑覆盖重要文件
误覆盖文件是血泪高发区!三个防护开关按需选用:
| 参数 | 作用 | 适用场景 |
|---|---|---|
| -i | 交互式确认 | 复制少量文件时人工把关 |
| -n | 禁止覆盖 | 备份时保护已有数据 |
| -u | 增量更新 | 同步新旧版本目录 |
比如更新项目代码但保留配置文件:cp -uR --preserve=all ./project_new/* ./project_old/
这命令只替换旧版中被修改的文件,你的config.ini安然无恙。
四、进度掌控:给复制操作加上可视化
复制百GB大目录时,盯着空荡荡的终端干着急?用rsync替代cp实时看进度:rsync -ah --progress source_dir/ dest_dir
参数-h让文件大小显示为人类可读格式(如12GB),--progress则显示实时传输百分比。每完成一个文件就会刷出新行:
report.log 1.2GB 13% 203MB/s 00:05 remaining
还可用pv管道监控:tar cf
source_dir | pv | (cd dest_dir; tar xf -)
像进度条一样显示已传输数据量,治愈你的等待焦虑症。
五、性能优化:加速大目录复制
复制百万小文件时,默认的cp可能慢如蜗牛。试试这些加速方案:
- 并行处理:用
parallel工具启动多线程find src -type f | parallel -j8 cp {} dest/ - 禁用hash校验:加
--sparse=always跳过磁盘校验 - 内存缓存:先打包成tar再解压
tar cf
src_dir | tar xf
-C dest_dir
实测复制10万个日志文件,并行操作比普通cp快6倍!记得用ionice降低磁盘优先级,避免复制时卡死整个系统:ionice -c3 cp -R big_dir /backup
六、场景实战:特殊需求花式操作
遇到这些场景时,cp参数组合能救命:
案例1:只想复制PDF和图片find ./documents -type f \( -name "*.pdf" -o -name "*.jpg" \) -exec cp {} ./backup/ \;
案例2:排除node_modules目录rsync -a --exclude='node_modules' project/ backup/
案例3:网络中断后续传rsync -P -e ssh user@remote:/bigdata ./local_dir-P参数支持断点续传,SSH断开后重新执行命令自动接上前次进度。
掌握这些技巧后,你会发现自己从目录复制工人进阶成数据搬运架构师。下次操作前先花10秒想想参数组合,可能省下两小时排错时间!
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/149971.html