xargs输入变命令行参数cpio打包解压文件
xargs:把标准输入变成命令行参数,解决“参数太多”或需要批量执行的问题。cpio:根据输入的文件列表进行三种操作:打包(archive)、解包(extract)、直接复制目录结构(pass-through)。
1.用cpio打包目录
1 | find /data/app -type f | cpio -ocv > app.cpio |
含义:
find → 输出文件列表
↓
cpio -o 读取列表并打包
↓
生成 app.cpio
参数说明:
-o:创建归档-c:使用可移植格式-v:显示过程
2.解包文件
1 | cpio -idmv < app.cpio |
参数:
-i解包-d自动创建目录-m保留时间-v显示过程
3.高效复制目录
比 cp -r 更可靠,能保留权限和结构:
1 | find /data/app | cpio -pdm /backup/app |
含义:
-p:pass-through 模式(直接复制)-d:创建目录-m:保留时间
这招经常用于:
- 容器目录迁移
- chroot/rootfs 制作
- 线上热备目录复制
4.加入 xargs 的实战场景
当文件数量极大时,一次传给 cpio 可能过多,这时用 xargs 分批:
1 | find /data/app -print0 | xargs -0 -n 1000 cpio -pdm /backup/app |
解释:
find → 输出文件
-print0 → 防止空格断裂
xargs -0 → 正确解析
-n 1000 → 每批1000个
cpio → 分批复制
适合:
- 百万级文件目录迁移
- inode 爆炸目录复制
- NAS → 本地迁移
5.生产环境常见技巧
1)避免空格问题(强烈推荐)
1 | find . -print0 | cpio -o0 > backup.cpio |
或:
1 | find . -print0 | xargs -0 ... |
2)跨机器复制(SSH 管道)
这在运维里非常常见:
1 | find /data | cpio -o | ssh host2 "cd /backup && cpio -idmv" |
效果:
服务器A 网络 服务器B
find → cpio → ssh → cpio 解包
无需中间文件,速度快。