博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于 xargs 参数被截断,tar 文件被覆盖的问题
阅读量:6377 次
发布时间:2019-06-23

本文共 1441 字,大约阅读时间需要 4 分钟。

hot3.png

问题:
目录下共 2W+ 个小文件:
$ find . -type f | wc -l  
20083  
如果我们这样打包,会爆出 "Argument list too long" 的错误:
$ tar zcf test.tar.gz *  
-bash: /bin/tar: Argument list too long  
这是由于 * 展开后参数长度超过系统参数 ARG_MAX 的限制
为了不报这种错误,我们考虑用find的参数扩展来试试:
$ find . -type f -name "120150_*" | xargs tar zcvf 120150.tar.gz  
这个执行下来没有报错,但是 120150.tar.gz 中并没有包含全部的文件:
$ gzip -d 120150.tar.gz && tar tf 120150.tar | wc -l  
3407  
 
Linux 有个系统参数,用来控制命令行下参数的长度(包含环境数据),这个参数是 ARG_MAX ,在正式环境上是 131072 (bytes) :
$ getconf ARG_MAX  
131072  
    凡是超过 131072 bytes 长度的参数都会被截断, * 分批 * 传给 xargs 后面的参数。所以我猜想,第二批参数列表产生的压缩包把第一批参数列表产生的压缩包覆盖掉了,第三批又把第二批覆盖掉了。。。实际上只有最后一次传进来的参数被打进了压缩包中。

解决办法:

先追加打包所有文件,再压缩:

FILE_NUM=$(find . -type f | wc -l)  logger "$BID FILE_NUM = $FILE_NUM"  if [[ $FILE_NUM -gt $FILE_TRANSFER_LIMIT ]];then    logger "FILE_NUM More than $FILE_TRANSFER_LIMIT"    # 先用tar创建一个空的tar包,"tar cf null.tar" 会报错:"tar: Cowardly refusing to create an empty archive"    tar uf ./$BID.tar    # 用xargs追加进去所有的文件,这次不用怕被截断了~    find . -name "${BID}_*" | xargs tar uf ./$BID.tar    # 然后再压缩    gzip ./$BID.tar  else    logger "FILE_NUM Less than $FILE_TRANSFER_LIMIT"    tar zcf ./$BID.tar.gz "$BID"_*  fi

其实 xargs 这些用法的区别有些类似于 http 协议中 " 幂等 " 的概念, tar cf 这种命令是不 " 幂等 " 的, rm 这类的命令则是 " 幂等 " 的,有兴趣的同事可以参考这个链接: http://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE#.E5.AE.89.E5.85.A8.E5.8F.8A.E5.B9.82.E7.AD.89.E6.96.B9.E6.B3.95 

转载于:https://my.oschina.net/leejun2005/blog/77807

你可能感兴趣的文章
221. Maximal Square
查看>>
MySQL基础
查看>>
LeetCode35.搜索插入位置 JavaScript
查看>>
5个让人赞不绝口的微信小程序,拒绝占用手机内存!
查看>>
Spring Security整合KeyCloak保护Rest API
查看>>
POS概述
查看>>
containerd发布了CRI修复程序和CVE-2019-5736更新的runc
查看>>
WEB前端开发的思考与感悟
查看>>
微信自动跳转浏览器打开APP(APK)下载链接
查看>>
==与===的区别
查看>>
不同工具查看代码分支diff的差异
查看>>
白话Java I/O模型
查看>>
上传一张照片,让算法告诉你是否患有抑郁症
查看>>
VR厂商唯晶科技获2800万C+轮融资,曾开发过游戏《圣女之歌》
查看>>
Countly 19.02.1 发布,实时移动和 web 分析报告平台
查看>>
TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔
查看>>
Oracle数据库机出新帮助不同规模企业迈向云端
查看>>
前端通信:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布...
查看>>
微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
查看>>
被《时代周刊》选为年度最佳发明,PS VR靠的竟然是价格
查看>>