免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8496 | 回复: 35
打印 上一主题 下一主题

怎么样去掉一个文件的最后60字节? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-24 11:44 |只看该作者 |倒序浏览


这个文件比较的大,而且是二进制的。

论坛徽章:
0
2 [报告]
发表于 2006-11-24 12:07 |只看该作者
看看split

论坛徽章:
0
3 [报告]
发表于 2006-11-24 13:42 |只看该作者
没效率,能实现:
  1. dd of=outfile if=urfile bs=1 seek=1 count=$(ll urfile |awk '{ print $5 - 61 }')
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-11-24 13:46 |只看该作者
原帖由 Edengundam 于 2006-11-24 12:07 发表
看看split

来个马后跑
split -b $(($(stat -c "%s" filename)-60)) filename;cat xaa>filename;rm xab

论坛徽章:
0
5 [报告]
发表于 2006-11-24 14:11 |只看该作者
谢谢各位大师。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-11-24 14:32 |只看该作者
偷烈火的來改一下:
dd if=src.file of=new.file bs=(($(stat -c "%s" filename)-60)) count=1

论坛徽章:
0
7 [报告]
发表于 2006-11-24 14:39 |只看该作者
哈哈,偶bs是太小了,效率超低。

论坛徽章:
0
8 [报告]
发表于 2006-11-24 14:45 |只看该作者
原帖由 awk就是awp加ak 于 2006-11-24 14:39 发表
哈哈,偶bs是太小了,效率超低。


能用就行

论坛徽章:
0
9 [报告]
发表于 2006-11-24 16:11 |只看该作者
原帖由 網中人 于 2006-11-24 14:32 发表
偷烈火的來改一下:
dd if=src.file of=new.file bs=(($(stat -c "%s" filename)-60)) count=1

这样快是快了,不过有点小问题,bs的大小取决于内存的大小,如果文件大小超过您机器的内存空间大小。那么就会出错了 ^0^
其实,经过偶测试,最快的是
  1. head -c
复制代码

不过不是很清楚这个命令是否能够安全的传输所有数据,对split也和head有同样的疑惑。

数据传输,还是dd最经典,写个shell判断自己系统的内存空间与文件大小再设定bs,应该是综合考虑后这个问题最好的解决方案。

论坛徽章:
0
10 [报告]
发表于 2006-11-24 16:43 |只看该作者
我楼上的还是有些问题,研究了AIX的命令参考大全里dd的说明:
“在指定块大小时注意 bs 必须为设备物理大小的整数倍因为不正确的块大小将会导致数据的不一致或者重叠。
bs=BlockSize         指定输入输出块的大小,取代 ibs 和 obs 标志。由 bs 标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。”
这个自己不好测试了……,请经常用dd处理数据的达人来给偶们解解惑吧。^-^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP