![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 07:36 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 【出题】30万文件快速替换 |
| 可打印版本 3,109 / 21 |
| 第1楼 plp626 | 发表于 2010-03-02 23:59 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
【出题】30万文件快速替换 手上现在有30多万htm文件(还有少量的html),这些文件里有相当多的一部分挂马,发现这些挂马的html及htm源文件的最后一行含有mm.aa88567.cn这个网址,
现在,要找出那些挂马的网页(最后一行包含字符串"mm.aa88567.cn”),然后把它的最后一行删掉, 使用工具,windows 自带的常用工具,或者外部工具:perl,sed,。。。(体积大小不超过1M的皆可) 现在求处理速度最快的工具,及其方案(代码) sed (40K 版本 4.0.7)下载: http://upload.cn-dos.net/img/1813.rar perl(369K 版本 5.005_03) 下载: http://upload.cn-dos.net/img/1814.rar 下面是生产测试文件的bat代码: [ Last edited by plp626 on 2010-3-4 at 23:00 ] |
|
| 第2楼 radem | 发表于 2010-03-03 01:46 |
| 高级用户 发帖 383 积分 691 | |
|
WIN32的要吗
速度未知 附件 20100303013116751.png (2.68 KiB) |
|
| 第3楼 Pierre | 发表于 2010-03-03 02:19 |
| 初级用户 发帖 19 积分 30 | |
|
试试
for /f "delims=" %%i in ('dir /s /b *.html') do sed -i "${/mm\.aa88567\.cn/d}" "%%i" [ Last edited by Pierre on 2010-3-3 at 02:23 ] |
|
| 第4楼 HAT | 发表于 2010-03-03 04:36 |
| 版主 发帖 5,017 积分 9,023 | |
| 第5楼 qq330878338 | 发表于 2010-03-03 14:34 |
| 新手上路 发帖 7 积分 13 | |
|
看了下 不简单 只能帮顶了。
|
|
| 第6楼 plp626 | 发表于 2010-03-03 15:09 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
4楼的代码应该是比较快的---- 相比3路没有频繁的启动sed
可是: 用1楼的bat代码生成测试文件在test目录内,于test父目录路径下打开cmd,键入 sed -i "/mm\.aa88567\.cn/d" test\*.html 后,不等几秒钟便出现sed什么内存不能为read的错误 貌似sed最多支持批量处理文件为512个,因为在目录生成了511个临时文件就弹出了这错误对话框, 不知何故,继续关注。。。。 [ Last edited by plp626 on 2010-3-3 at 15:11 ] |
|
| 第7楼 tachyon | 发表于 2010-03-03 16:06 |
| 初级用户 发帖 32 积分 33 | |
|
直接sed速度最快,不要用通过for, for的效率是最低的。 频繁开启&结束sed进程,对系统资源也是极大消耗,估计用不了多久cpu / mem 就out了。
还有,300,000 文件挨个处理速度不会太快的,毕竟牵扯到磁盘操作,不像是在内存里做计算类任务。 |
|
| 第8楼 tachyon | 发表于 2010-03-03 16:10 |
| 初级用户 发帖 32 积分 33 | |
Originally posted by plp626 at 2010-3-3 15:09: 这个还是要看sed文档了,如果有同时编辑的文件数目限制,那可以先通过batch 把所有文件按数量划分到若干个目录,之后再依次对各个目录进行sed 处理。 |
|
| 第9楼 sady2009 | 发表于 2010-03-03 16:41 |
| 初级用户 发帖 60 积分 58 | |
|
现在的内存都很大.
安装个ramdisk .把文件弄到ramdisk 盘中再用批处理. 它的小文件存取速度是非常惊人的. 相对于在内存中执行一样了. |
|
| 第10楼 Pierre | 发表于 2010-03-03 17:19 |
| 初级用户 发帖 19 积分 30 | |
|
直接 *.html的话,通配符匹配到的文件都是以参数形式传递给sed来执行的,所以不能超出某个量数
—— 如果你在shell下这样用sed的话,就会出现 这样的错误 当然,不仅仅是sed这样, awk/grep 等均有此待遇 如果想效率再高点的话,可以切割列表,500个一次送给sed处理 [ Last edited by Pierre on 2010-3-3 at 17:20 ] |
|
| 第11楼 Pierre | 发表于 2010-03-03 17:27 |
| 初级用户 发帖 19 积分 30 | |
|
或者,直接用perl处理,让它循环处理
可惜用得不熟,迟点试着写个解决看看罢。。。 |
|
| 第12楼 plp626 | 发表于 2010-03-03 20:42 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
我对perl也不怎么懂,还真希望有某高人能用一楼提供的perl来试试,
期待中。。。。。 |
|
| 第13楼 freeants001 | 发表于 2010-03-04 16:19 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
|
贴个自已用的JS文件替换代码,按楼主的要求修改了下。
|
|
| 第14楼 freeants001 | 发表于 2010-03-04 20:18 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
|
再来一段AHK脚本
|
|
| 第15楼 plp626 | 发表于 2010-03-04 21:23 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
13楼的代码试了下,速度那时没的说,只是,文件的后缀名统一被改为txt了,那些网页文件,索引的后缀是html,非索引的是htm,
对js不懂,你的代码后缀名不变的情形如何修改? |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |